/* @(#) $Id: //bas/710_REL/src/krn/rfc/srfctest.h#1 $ SAP*/ /*====================================================================*/ /* */ /* PROGRAM : srfctest.h (running on Windows, Windows_NT, */ /* Windows_95, OS/2 and R/3-Platforms)*/ /* */ /* */ /* DESCRIPTION : Includes file for RFC-Test */ /* */ /* */ /* SAP AG Walldorf */ /* Systeme, Anwendungen und Produkte in der Datenverarbeitung */ /* */ /* Copyright (C) SAP AG 1994 */ /* */ /*====================================================================*/ /*--------------------------------------------------------------------*/ /* Defines */ /*--------------------------------------------------------------------*/ #ifndef SAPonLIN #define _XOPEN_SOURCE_EXTENDED 1 #define _HPUX_SOURCE /* HP gettimeofday(), timeval, timezone */ #define _ALL_SOURCE /* AIX gettimeofday(), timeval, timezone */ #define __EXTENSIONS__ /* SUN gettimeofday(), timeval, timezone */ #define _OSF_SOURCE /* OSF gettimeofday(), timeval, timezone */ #ifdef SAPonRM600 #define _XOPEN_SOURCE 1 /* on rm600, because already in saptype.h */ #endif #endif #define BLANK cU(' ') #define LINE_SIZE 1024 #define ITAB0332_ENTRY_SIZE 332*sizeofR(SAP_UC) #define ITAB1000_ENTRY_SIZE 1000*sizeofR(SAP_UC) #define ETAB0332_ENTRY_SIZE 332*sizeofR(SAP_UC) #define ETAB1000_ENTRY_SIZE 1000*sizeofR(SAP_UC) /*--------------------------------------------------------------------*/ /* Set up includes */ /*--------------------------------------------------------------------*/ #include #include #include #include #include /* SAP flag for OS/2 */ #if defined(OS2) # ifndef SAPonOS2_2x # define SAPonOS2_2x # endif #endif /* SAP flag for Windows NT or 95 */ #ifdef _WIN32 # ifndef SAPonNT # define SAPonNT # endif #endif #if defined(SAPonUNIX) || defined(SAPonOS390) || defined(SAPonOS400) # include #endif #ifdef SAPonSUN int gettimeofday(struct timeval *, void *); #endif #ifndef SAPonOS400 # include #endif /* ! SAPonOS400 */ #include "saprfc.h" #include "sapitab.h" #include "rfcsi.h" #ifdef DGUX #include #endif /************************************************************/ /* Definition for inhomogeneous structure/table 'RFCTEST' */ /************************************************************/ static RFC_TYPEHANDLE handleOfRfcTest; /* this is generated using the genh utilty in .../rfcsdk/bin */ typedef struct RFCTEST { SAP_DOUBLE rfcfloat; #define RFCTEST_RFCFLOAT_LN 8 #define RFCTEST_RFCFLOAT_TYP RFCTYPE_FLOAT SAP_CHAR rfcchar1 [1]; #define RFCTEST_RFCCHAR1_LN (1 * sizeofR(SAP_CHAR)) #define RFCTEST_RFCCHAR1_CCNT 1 #define RFCTEST_RFCCHAR1_TYP RFCTYPE_CHAR /* Filler[s] for compiler independent alignment of fields: */ rfc_padd_4_1bperC(0) /* filler for 1 byte per SAP_UC */ SAP_SHORT rfcint2; #define RFCTEST_RFCINT2_LN 2 #define RFCTEST_RFCINT2_TYP RFCTYPE_INT2 SAP_RAW rfcint1; #define RFCTEST_RFCINT1_LN 1 #define RFCTEST_RFCINT1_TYP RFCTYPE_INT1 /* Filler[s] for compiler independent alignment of fields: */ rfc_padd_4_2bperC(0) /* filler for 2 bytes per SAP_UC */ rfc_padd_4_4bperC(0) /* filler for 4 bytes per SAP_UC */ SAP_CHAR rfcchar4 [4]; #define RFCTEST_RFCCHAR4_LN (4 * sizeofR(SAP_CHAR)) #define RFCTEST_RFCCHAR4_CCNT 4 #define RFCTEST_RFCCHAR4_TYP RFCTYPE_CHAR /* Filler[s] for compiler independent alignment of fields: */ rfc_padd_4_1bperC(1) /* filler for 1 byte per SAP_UC */ rfc_padd_4_1bperC(2) /* filler for 1 byte per SAP_UC */ rfc_padd_4_1bperC(3) /* filler for 1 byte per SAP_UC */ rfc_padd_4_2bperC(1) /* filler for 2 bytes per SAP_UC */ rfc_padd_4_2bperC(2) /* filler for 2 bytes per SAP_UC */ SAP_INT rfcint4; #define RFCTEST_RFCINT4_LN 4 #define RFCTEST_RFCINT4_TYP RFCTYPE_INT SAP_RAW rfchex3 [3]; #define RFCTEST_RFCHEX3_LN 3 #define RFCTEST_RFCHEX3_TYP RFCTYPE_BYTE /* Filler[s] for compiler independent alignment of fields: */ rfc_padd_4_2bperC(3) /* filler for 2 bytes per SAP_UC */ rfc_padd_4_4bperC(1) /* filler for 4 bytes per SAP_UC */ SAP_CHAR rfcchar2 [2]; #define RFCTEST_RFCCHAR2_LN (2 * sizeofR(SAP_CHAR)) #define RFCTEST_RFCCHAR2_CCNT 2 #define RFCTEST_RFCCHAR2_TYP RFCTYPE_CHAR SAP_CHAR rfctime [6]; #define RFCTEST_RFCTIME_LN (6 * sizeofR(SAP_CHAR)) #define RFCTEST_RFCTIME_CCNT 6 #define RFCTEST_RFCTIME_TYP RFCTYPE_TIME SAP_CHAR rfcdate [8]; #define RFCTEST_RFCDATE_LN (8 * sizeofR(SAP_CHAR)) #define RFCTEST_RFCDATE_CCNT 8 #define RFCTEST_RFCDATE_TYP RFCTYPE_DATE SAP_CHAR rfcdata1 [50]; #define RFCTEST_RFCDATA1_LN (50 * sizeofR(SAP_CHAR)) #define RFCTEST_RFCDATA1_CCNT 50 #define RFCTEST_RFCDATA1_TYP RFCTYPE_CHAR SAP_CHAR rfcdata2 [50]; #define RFCTEST_RFCDATA2_LN (50 * sizeofR(SAP_CHAR)) #define RFCTEST_RFCDATA2_CCNT 50 #define RFCTEST_RFCDATA2_TYP RFCTYPE_CHAR /* Filler for compiler independant alligment of arrays from this stucture: */ rfc_padd_4_1bperCF(4,1) /* filler for 1 byte per SAP_UC */ } RFCTEST; /* Warning : Structure may need 8-bytes alignment. */ /* Warning : up to 5 filler bytes inserted. */ #define RFCTEST_LN sizeofR( RFCTEST ) /* set this to generate also structure information for * RFC programs. * * You can use this on both UNICODE and non-UNICODE Programs * */ static RFC_UNICODE_TYPE_ELEMENT typeOfRfcTest[] = { { cU("Rfcfloat"), RFCTEST_RFCFLOAT_TYP, 16, 8, 0, 8, 0, 8, 0 }, { cU("Rfcchar1"), RFCTEST_RFCCHAR1_TYP, 0, 1, 8, 2, 8, 4, 8 }, { cU("Rfcint2"), RFCTEST_RFCINT2_TYP, 0, 2, 10, 2, 10, 2, 12 }, { cU("Rfcint1"), RFCTEST_RFCINT1_TYP, 0, 1, 12, 1, 12, 1, 14 }, { cU("Rfcchar4"), RFCTEST_RFCCHAR4_TYP, 0, 4, 13, 8, 14, 16, 16 }, { cU("Rfcint4"), RFCTEST_RFCINT4_TYP, 0, 4, 20, 4, 24, 4, 32 }, { cU("Rfchex3"), RFCTEST_RFCHEX3_TYP, 0, 3, 24, 3, 28, 3, 36 }, { cU("Rfcchar2"), RFCTEST_RFCCHAR2_TYP, 0, 2, 27, 4, 32, 8, 40 }, { cU("Rfctime"), RFCTEST_RFCTIME_TYP, 0, 6, 29, 12, 36, 24, 48 }, { cU("Rfcdate"), RFCTEST_RFCDATE_TYP, 0, 8, 35, 16, 48, 32, 72 }, { cU("Rfcdata1"), RFCTEST_RFCDATA1_TYP, 0, 50, 43, 100, 64, 200, 104 }, { cU("Rfcdata2"), RFCTEST_RFCDATA2_TYP, 0, 50, 93, 100, 164, 200, 304 } }; #define ENTRIES( tab ) ( sizeofR(tab)/sizeofR((tab)[0]) ) RFCTEST imstruct, exstruct; /************************************************************/ /* End Definition for inhomogeneous structure/table */ /************************************************************/ /*--------------------------------------------------------------------*/ /* Function prototypes */ /*--------------------------------------------------------------------*/ int srfcinfo(void); int srfcconn(void); int srfcload(void); int srfcdiag(void); int srfctruc(void); int ssncconv(void); int srfcback(void); int srfcchek(void); int srfccanc(void); int srfcconv(void); int srfcsreg(void); int srfccancel(void); int srfcchn (void); int srfcraiseerror (void); static int get_cancel_type (RFC_CHAR *busy, RFC_INT* sec); #ifndef SAPonNT #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */ extern unsigned sleep(unsigned); #ifdef __cplusplus } /* End of extern "C" { */ #endif /* __cplusplus */ #endif void check_gui_for_start(void); static RFC_RC DLL_CALL_BACK_FUNCTION connection_test(RFC_HANDLE rfc_handle); static rfc_char_t *connection_test_docu(void); void get_attributes(RFC_HANDLE rfc_handle); void get_parameter_for_reg_server(void); void get_parameter_for_conn_test(void); void get_parameter_for_load_test(void); void get_parameter_for_diag_test(void); void get_parameter_for_back_test(void); void get_parameter_for_sreg_test(void); void get_connect_data_from_file(void); void get_connect_data_via_dialog(void); void get_load_test_data_from_file(void); void get_load_test_data_via_dialog(void); void get_diag_test_data_from_file(void); void get_diag_test_data_via_dialog(void); void get_back_test_data_from_file(void); void get_back_test_data_via_dialog(void); void get_sreg_test_data_from_file(void); void get_sreg_test_data_via_dialog(void); void save_test_parameter(void); int getParametersForRaiseError (rfc_char_t * method, rfc_char_t * messagetype, rfc_char_t * parameter); #ifdef __VMS /* der compiler auf VAX/VMS kann maximal 31 chars fuer identifier */ /* wegen object file format */ #define get_connection_parameters_from_file get_connectn_params_from_file #define get_connection_parameters_via_dialog get_connectn_params_via_dialog #endif void get_connection_parameters_from_file(void); void get_connection_parameters_via_dialog(void); int RFC_connect(const SAP_CHAR * callerName); rfc_char_t *read_record(FILE * fp, rfc_char_t * ibuf); void check_blank(rfc_char_t *text); int PM_search(rfc_char_t *param, rfc_char_t *text, int leng); int fill_table(ITAB_H itab_h, int leng); int check_table(ITAB_H itab_h, RFC_CHAR *itabname, int recvleng, rfc_char_t *checktab, rfc_char_t *text, rfc_char_t *retcode); int output_table(ITAB_H itab_h, rfc_char_t * itabname); int print_mystruct(RFCTEST * rfctest); int print_mytable(ITAB_H itab_h); void display(rfc_char_t * arrow, RFC_PARAMETER * rfc_param); void display_rfcsi(RFCSI *rfcsi); void DLL_CALL_BACK_FUNCTION rfc_error(rfc_char_t *operation); void rfcsnc_error (rfc_char_t * operation, RFC_ERROR_INFO_EX error_info); void rfc_param(RFC_PARAMETER *rfc_param, rfc_char_t *abap_field_name, unsigned data_type, void *data_addr, unsigned data_len ); #if defined(SAP_RFC_TIME) struct timeval { unsigned long tv_sec; /* seconds since Jan. 1, 1970 */ long tv_usec; /* and microseconds */ }; struct timezone { int tz_minuteswest; /* of UTC */ int tz_dsttime; /* type of DST correction to apply */ }; #endif #if defined(SAPonUNIX) unsigned int diffmsec (struct timeval *, struct timeval *); #elif defined(SAPonOS400) unsigned int diffmsec_AS400 (time_t, time_t); #else unsigned int diffmsec_NON_UNIX(struct timeb *, struct timeb *); #endif /*--------------------------------------------------------------------*/ /* Declarations */ /*--------------------------------------------------------------------*/ int i, j, rc, znr, action, syntax_OK; unsigned ulen; int lineleng, itableng; rfc_char_t work_file[129], std_data_file[13] = iU("srfctest.txt"); rfc_char_t requtext[256], echotext[256], resptext[256]; rfc_char_t * ptr, ips[257], wbuf[LINE_SIZE+1], sbuf1[LINE_SIZE+1], sbuf2[LINE_SIZE+1], sbuf[4096+1]; rfc_char_t rfc_dest[33], client[4], userid[13], password[41], language[3], connect_param[1024]; rfc_char_t saplogon[2], saplogon_id[257], saprfc_ini[2], sapsys[2], register_mode[2], load_balancing[2], mshost[101], group[33], r3name[101], ashost[101], sysnr[3], gwhost[101], gwserv[8], invisible[2], use_sapgui[2], abap_debug[2], abap_debug_ext[2], gui_at_open[2], rfc_trace[2], use_close[2], tphost[101], tpid[101], tpname[101], sreg_tpname[65], #ifdef SAPwithUNICODE pcs = cU('\0'), #endif sncmode[2]; rfc_char_t std_saplogon_id[] = iU("BIN [PUBLIC]"), std_rfc_dest_r3[] = iU("BIN"), std_rfc_dest_r2[] = iU("K50"), std_rfc_dest_ext[] = iU("RFCEXT"), std_gwhost[] = iU("ihsap4"), std_gwserv[] = iU("sapgw00"), std_r3name[] = iU("BIN"), std_mshost[] = iU("binmain"), std_group[] = iU("PUBLIC"), std_ashost[] = iU("binmain"), std_sysnr[] = iU("53"), std_tcode[] = iU("SE38"), std_fname[] = iU("STFC_SAPGUI"), stde_gwhost[] = iU("binmain"), stde_gwserv[] = iU("sapgw53"), stde_tphost[] = iU("binmain"), stde_tpid[] = iU("hs0335.srfcserv"), stde_tpname[] = iU("/bas/BIN/gen/dbg/hp/srfcserv"), std_snc_partnername[] = iU("s:sample@hs0335"), std_snc_lib[] = iU("/krb5/hpux/lib/libkrb5.sl"); int nrcall, nrback, noback, nrcount, lgit0332, lgit1000, lget0332, lget1000; rfc_char_t retcode[2], exitcode[2], checktab[2], printtab[2], nrcall_field[6], nrback_field[6], noback_field[6], lgit0332_field[6], lgit1000_field[6], lget0332_field[6], lget1000_field[6], transaction_test[2], tcode[31], fname[31]; rfc_char_t text0332[73], text1000[73], texi0332[73], texi1000[73]; int err_code; rfc_char_t err_mess[255]; rfc_char_t abort_text[80], last_error_text[150]; FILE *work_fp; rfc_char_t *exception = NULL, *function = NULL; struct tm *time_ptr; time_t actutime; #if defined(SAPonUNIX) struct timeval sopenmsec, eopenmsec, scallmsec, ecallmsec, sfillmsec, efillmsec, schekmsec, echekmsec; #ifdef SAPonRM600 struct timezone { int tz_minuteswest; /* of UTC */ int tz_dsttime; /* type of DST correction to apply */ }; #endif struct timezone tzp; #elif defined(SAPonOS400) time_t sopenmsec, eopenmsec, scallmsec, ecallmsec, sfillmsec, efillmsec, schekmsec, echekmsec; #else struct timeb sopenmsec, eopenmsec, scallmsec, ecallmsec, sfillmsec, efillmsec, schekmsec, echekmsec; #endif unsigned int msectime, msecopen, mseccall, msecfill, msecchek, totalsnd, totalrcv, totaldat; RFC_RC rfc_rc; RFC_ENV new_env; RFC_HANDLE rfc_handle; RFC_FUNCTIONNAME function_name; RFC_ERROR_INFO_EX error_info; RFC_ATTRIBUTES rfc_attributes; RFC_PARAMETER exporting[6], importing[4], parameters[6], changing[3]; RFC_TABLE tables[5]; RFCSI rfcsi; RFC_INT start_value, counter, result; rfc_char_t name_systeminfo_test[31] = iU("RFC_SYSTEM_INFO"), name_connection_test[31] = iU("STFC_CONNECTION"), name_callback_test[31] = iU("STFC_CONNECTION_BACK"), name_performance_test[31] = iU("STFC_PERFORMANCE"), name_structure_test[31] = iU("STFC_STRUCTURE"), name_sreg_server_test[31] = iU("STFC_START_CONNECT_REG_SERVER"), name_rfc_raise_exception[31] = iU("RFC_RAISE_ERROR"), name_rfc_ping_and_wait[31] = iU("RFC_PING_AND_WAIT"), name_rfc_chn[31] = iU("STFC_CHANGING"); /*--------------------------------------------------------------------*/ /* Declarations for working with SNC */ /*--------------------------------------------------------------------*/ #define SNC_NAME_LN 256 #define SNC_LIB_LN 256 int aclkey_len; rfc_char_t snc_name[SNC_NAME_LN+1]; rfc_char_t snc_myname[SNC_NAME_LN+1]; rfc_char_t snc_partnername[SNC_NAME_LN+1]; rfc_char_t snc_lib[SNC_LIB_LN+1]; RFC_BYTE snc_aclkey[SNC_NAME_LN+1]; RFC_EXT_DATA rfc_ext_data; SAP_RFC_STATISTIC stats; rfc_char_t profile_name[512]; static rfc_char_t prf_name[] = iU ("profil_gen.txt");