// Print usage message void usage(const char* szExecutable) { char szBuffer[64]; sipxConfigGetVersion(szBuffer, 64); printf("\nUsage:\n") ; printf(" %s <options> [URL]\n", szExecutable) ; printf(" using %s\n", szBuffer); printf("\n") ; printf("Options:\n") ; printf(" -d durationInSeconds (default=30 seconds)\n") ; printf(" -t play tones (default = none)\n") ; printf(" -f play file (default = none)\n") ; printf(" -b play file from buffer (default = none)\n") ; printf(" -p SIP port (default = 5060)\n") ; printf(" -r RTP port start (default = 9000)\n") ; printf(" -R use rport as part of via (disabled by default)\n") ; printf(" -B ip address to bind to\n"); printf(" -u username (for authentication)\n") ; printf(" -a password (for authentication)\n") ; printf(" -m realm (for authentication)\n") ; printf(" -i from identity\n") ; printf(" -S stun server\n") ; printf(" -x proxy (outbound proxy)\n"); printf(" -v show sipXtapi version\n"); printf(" -c repeat count/Prank mode (call end point N times)\n") ; printf(" -I call input device name\n"); printf(" -O call output device name\n"); printf(" -C codec name\n"); printf(" -L list all supported codecs\n"); printf(" -aec enable acoustic echo cancelation\n"); printf(" -agc enable automatic gain control\n"); printf(" -denoise enable speex denoiser\n"); printf(" -E use bogus custom external transport, reliable (transport=tribble)\n"); printf(" -e use bogus custom external transport, unreliable (transport=flibble)\n"); #if defined(_WIN32) && defined(VIDEO) printf(" -V place a video call\n"); #endif printf("\n") ; }
// Parse arguments bool parseArgs(int argc, char *argv[], int* pDuration, int* pSipPort, int* pRtpPort, char** pszPlayTones, char** pszFile, char** pszIdentity, char** pszUsername, char** pszPassword, char** pszRealm, char** pszStunServer, char** pszProxy) { bool bRC = true ; char szBuffer[64]; assert(pDuration && pszPlayTones) ; *pDuration = 30 ; *pSipPort = 5060 ; *pRtpPort = 9000 ; *pszPlayTones = NULL ; *pszFile = NULL ; *pszIdentity = NULL ; *pszUsername = NULL ; *pszPassword = NULL ; *pszRealm = NULL ; *pszStunServer = NULL ; *pszProxy = NULL; for (int i=1; i<argc; i++) { if (strcmp(argv[i], "-d") == 0) { if ((i+1) < argc) { *pDuration = atoi(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-t") == 0) { if ((i+1) < argc) { *pszPlayTones = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-f") == 0) { if ((i+1) < argc) { *pszFile = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-p") == 0) { if ((i+1) < argc) { *pSipPort = atoi(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-r") == 0) { if ((i+1) < argc) { *pRtpPort = atoi(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-i") == 0) { if ((i+1) < argc) { *pszIdentity = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-u") == 0) { if ((i+1) < argc) { *pszUsername = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-a") == 0) { if ((i+1) < argc) { *pszPassword = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-m") == 0) { if ((i+1) < argc) { *pszRealm = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-S") == 0) { if ((i+1) < argc) { *pszStunServer = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-x") == 0) { if ((i+1) < argc) { *pszProxy = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-v") == 0) { sipxConfigGetVersion(szBuffer, 64); printf("%s\n", szBuffer); exit(0); } #ifdef VIDEO else if (strcmp(argv[i], "-V") == 0) { bVideo = true; } #endif else { bRC = false ; break ; // Error } } return bRC ; }
// Parse arguments bool parseArgs(int argc, char *argv[], int* pDuration, int* pSipPort, int* pRtpPort, char** pszPlayTones, char** pszFile, bool* bLoopback, char** pszIdentity, char** pszUsername, char** pszPassword, char** pszRealm, char** pszStunServer, char** pszProxy, bool* bDialogEvents, char** pszDelay, bool* bTimestamp, long int* pRunTime) { bool bRC = true ; char szBuffer[64]; assert(pDuration && pszPlayTones) ; *pDuration = 30 ; *pSipPort = 5060 ; *pRtpPort = 9000 ; *pszPlayTones = NULL ; *pszFile = NULL ; *bLoopback = false ; *pszIdentity = NULL ; *pszUsername = NULL ; *pszPassword = NULL ; *pszRealm = NULL ; *pszStunServer = NULL ; *pszProxy = NULL; *bDialogEvents = false; *bTimestamp = false; *pszDelay = NULL; for (int i=1; i<argc; i++) { if (strcmp(argv[i], "-d") == 0) { if ((i+1) < argc) { *pDuration = atoi(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-t") == 0) { if ((i+1) < argc) { *pszPlayTones = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-f") == 0) { if ((i+1) < argc) { *pszFile = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-p") == 0) { if ((i+1) < argc) { *pSipPort = atoi(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-r") == 0) { if ((i+1) < argc) { *pRtpPort = atoi(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-l") == 0) { *bLoopback = true ; } else if (strcmp(argv[i], "-i") == 0) { if ((i+1) < argc) { *pszIdentity = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-u") == 0) { if ((i+1) < argc) { *pszUsername = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-a") == 0) { if ((i+1) < argc) { *pszPassword = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-m") == 0) { if ((i+1) < argc) { *pszRealm = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-S") == 0) { if ((i+1) < argc) { *pszStunServer = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-x") == 0) { if ((i+1) < argc) { *pszProxy = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-v") == 0) { sipxConfigGetVersion(szBuffer, 64); printf("%s\n", szBuffer); exit(0); } else if (strcmp(argv[i], "-e") == 0) { *bDialogEvents = true; } else if (strcmp(argv[i], "-D") == 0) { if ((i+1) < argc) { *pszDelay = strdup(argv[++i]); } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-T") == 0) { *bTimestamp = true; } else if (strcmp(argv[i], "-R") == 0) { if ((i+1) < argc) { *pRunTime = atoi(argv[++i]) ; } else { bRC = false ; break ; // Error } } else { fprintf(stderr, "Unknown argument '%s'\n", argv[i]); bRC = false ; break ; // Error } } return bRC ; }
// Parse arguments bool parseArgs(int argc, char* argv[], int* pDuration, int* pSipPort, int* pRtpPort, char** pszPlayTones, char** pszFile, char** pszFileBuffer, char** pszUrl, bool* bUseRport, char** pszUsername, char** pszPassword, char** pszRealm, char** pszFromIdentity, char** pszStunServer, char** pszProxy, char** pszBindAddress, int* pRepeatCount, char** pszInputDevice, char** pszOutputDevice, char** pszCodecName, bool* bCodecList, bool* bAEC, bool* bAGC, bool* bDenoise, bool* bUseCustomTransportReliable, bool* bUseCustomTransportUnreliable) { bool bRC = false ; char szBuffer[64]; assert(pDuration && pszPlayTones && pszUrl) ; *pDuration = 30 ; *pSipPort = 5060 ; *pRtpPort = 9000 ; *pRepeatCount = 1 ; *pszPlayTones = NULL ; *pszFile = NULL ; *pszFileBuffer = NULL ; *pszUrl = NULL ; *bUseRport = false ; *pszUsername = NULL ; *pszPassword = NULL ; *pszRealm = NULL ; *pszFromIdentity = NULL ; *pszStunServer = NULL ; *pszProxy = NULL; *pszBindAddress = NULL; *pszInputDevice = NULL; *pszOutputDevice = NULL; *pszCodecName = NULL; *bCodecList = false; *bAEC = false; *bAGC = false; *bDenoise = false; for (int i=1; i<argc; i++) { if (strcmp(argv[i], "-d") == 0) { if ((i+1) < argc) { *pDuration = atoi(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-t") == 0) { if ((i+1) < argc) { *pszPlayTones = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-p") == 0) { if ((i+1) < argc) { *pSipPort = atoi(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-r") == 0) { if ((i+1) < argc) { *pRtpPort = atoi(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-f") == 0) { if ((i+1) < argc) { *pszFile = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-b") == 0) { if ((i+1) < argc) { *pszFileBuffer = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-u") == 0) { if ((i+1) < argc) { *pszUsername = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-a") == 0) { if ((i+1) < argc) { *pszPassword = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-m") == 0) { if ((i+1) < argc) { *pszRealm = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-i") == 0) { if ((i+1) < argc) { *pszFromIdentity = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-x") == 0) { if ((i+1) < argc) { *pszProxy = strdup(argv[++i]) ; } else { bRC = false ; break ; // Error } } else if (strcmp(argv[i], "-S") == 0) { if ((i+1) < argc) { *pszStunServer = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-B") == 0) { if ((i+1) < argc) { *pszBindAddress = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-R") == 0) { *bUseRport = true ; } else if (strcmp(argv[i], "-L") == 0) { *bCodecList = true ; bRC = true ; } else if (strcmp(argv[i], "-v") == 0) { sipxConfigGetVersion(szBuffer, 64); printf("%s\n", szBuffer); exit(0); } else if (strcmp(argv[i], "-c") == 0) { if ((i+1) < argc) { *pRepeatCount = atoi(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-I") == 0) { if ((i+1) < argc) { *pszInputDevice = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-O") == 0) { if ((i+1) < argc) { *pszOutputDevice = strdup(argv[++i]) ; } else { break ; // Error } } else if (strcmp(argv[i], "-C") == 0) { if ((i+1) < argc) { *pszCodecName = strdup(argv[++i]) ; } else { break ; // Error } } #ifdef VIDEO else if (strcmp(argv[i], "-V") == 0) { bVideo = true; } #endif else if (strcmp(argv[i], "-aec") == 0) { *bAEC = true; } else if (strcmp(argv[i], "-agc") == 0) { *bAGC = true; } else if (strcmp(argv[i], "-denoise") == 0) { *bDenoise = true; } else if (strcmp(argv[i], "-E") == 0) { *bUseCustomTransportReliable = true; } else if (strcmp(argv[i], "-e") == 0) { *bUseCustomTransportUnreliable = true; } else { if ((i+1) == argc) { *pszUrl = strdup(argv[i]) ; bRC = true ; } else { break ; // Error } } } return bRC ; }