int ListAdjacent::ProcessOptions(int argc, char** argv) { Option option; int argc_old=argc; while (*argv[0]=='-' && argc>1) { option.reset(); switch (argv[0][1]) { default: EchoError(string("unknown option ")+argv[0]); } // switch if(!option.option.empty()) addToSwitches(option); argc--; argv++; } // while return argc_old-argc; }
int TestInterface::ProcessOptions(int argc, char** argv) { Option option; int argc_old=argc; while (argc>1 && *argv[0]=='-') { option.reset(); switch (argv[0][1]) { case 't': if (argc<6){ EchoError("Not enough commandline arguments for switch -t"); break; } option.option = "-t"; option.addArgument(argv[1]); option.addArgument(argv[2]); option.addArgument(argv[3]); option.addArgument(argv[4]); if(sscanf(argv[1],"%d",&tileX1) != 1) EchoError("switch -t requires an integer specifier."); if(sscanf(argv[2],"%d",&tileY1) != 1) EchoError("switch -t requires an integer specifier."); if(sscanf(argv[3],"%d",&tileX2) != 1) EchoError("switch -t requires an integer specifier."); if(sscanf(argv[4],"%d",&tileY2) != 1) EchoError("switch -t requires an integer specifier."); argc-=4; argv+=4; break; case 'f': if (argc<5){ EchoError("Not enough commandline arguments for switch -f"); break; } option.option = "-f"; { int nr_opts=featureInterface.parseFeatureSpec(argv+1); int nrargs=3+2*nr_opts; int j; for(j=1;j<=nrargs;j++) option.addArgument(argv[j]); argc -= nrargs; argv += nrargs; } break; default: throw string("TestInterface::processOptions(): unknown option ")+argv[0]; } // switch if(!option.option.empty()) addToSwitches(option); argc--; argv++; } // while return argc_old-argc; }
int SampleRandom::ProcessOptions(int argc, char** argv) { Option option; int argc_old=argc; while (*argv[0]=='-' && argc>1) { option.reset(); switch (argv[0][1]) { case 'r': if (argc<3){ EchoError("Not enough commandline arguments for switch -r"); break; } option.option = "-r"; option.addArgument(argv[1]); if(sscanf(argv[1],"%d",&numberOfRegions) != 1) EchoError("switch -r requires an integer specifier."); argc--; argv++; break; case 's': if (argc<3){ throw string("Not enough commandline arguments for switch -s"); break; } option.option = "-s"; option.addArgument(argv[1]); if(sscanf(argv[1],"%d",&xSize) != 1) throw string("switch -s requires an integer specifier."); if(strchr(argv[1],':')){ if(sscanf(strchr(argv[1],':')+1,"%d",&ySize) != 1) throw string("switch -s requires an integer specifier after :."); } else ySize=xSize; case 'f': if (argc<3){ throw string("Not enough commandline arguments for switch -f"); break; } option.option = "-s"; option.addArgument(argv[1]); if(sscanf(argv[1],"%f",&xFrac) != 1) throw string("switch -f requires a float specifier."); if(strchr(argv[1],':')){ if(sscanf(strchr(argv[1],':')+1,"%f",&yFrac) != 1) throw string("switch -f requires a float specifier after :."); } else yFrac=xFrac; argc--; argv++; break; default: EchoError(string("unknown option ")+argv[0]); } // switch if(!option.option.empty()) addToSwitches(option); argc--; argv++; } // while return argc_old-argc; }
THREAD_RETURN YASSL_API echoserver_test(void* args) { #ifdef _WIN32 WSADATA wsd; WSAStartup(0x0002, &wsd); #endif SOCKET_T sockfd = 0; int argc = 0; char** argv = 0; set_args(argc, argv, *static_cast<func_args*>(args)); #ifdef ECHO_OUT FILE* fout = stdout; if (argc >= 2) fout = fopen(argv[1], "w"); if (!fout) err_sys("can't open output file"); #endif tcp_listen(sockfd); SSL_METHOD* method = SSLv23_server_method(); SSL_CTX* ctx = SSL_CTX_new(method); set_serverCerts(ctx); DH* dh = set_tmpDH(ctx); bool shutdown(false); #if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER) // signal ready to tcp_accept func_args& server_args = *((func_args*)args); tcp_ready& ready = *server_args.signal_; pthread_mutex_lock(&ready.mutex_); ready.ready_ = true; pthread_cond_signal(&ready.cond_); pthread_mutex_unlock(&ready.mutex_); #endif while (!shutdown) { SOCKADDR_IN_T client; socklen_t client_len = sizeof(client); SOCKET_T clientfd = accept(sockfd, (sockaddr*)&client, (ACCEPT_THIRD_T)&client_len); if (clientfd == (SOCKET_T) -1) { SSL_CTX_free(ctx); tcp_close(sockfd); err_sys("tcp accept failed"); } SSL* ssl = SSL_new(ctx); SSL_set_fd(ssl, clientfd); if (SSL_accept(ssl) != SSL_SUCCESS) { printf("SSL_accept failed\n"); SSL_free(ssl); tcp_close(clientfd); continue; } char command[1024]; int echoSz(0); while ( (echoSz = SSL_read(ssl, command, sizeof(command))) > 0) { if ( strncmp(command, "quit", 4) == 0) { printf("client sent quit command: shutting down!\n"); shutdown = true; break; } else if ( strncmp(command, "GET", 3) == 0) { char type[] = "HTTP/1.0 200 ok\r\nContent-type:" " text/html\r\n\r\n"; char header[] = "<html><body BGCOLOR=\"#ffffff\">\n<pre>\n"; char body[] = "greetings from yaSSL\n"; char footer[] = "</body></html>\r\n\r\n"; strncpy(command, type, sizeof(type)); echoSz = sizeof(type) - 1; strncpy(&command[echoSz], header, sizeof(header)); echoSz += sizeof(header) - 1; strncpy(&command[echoSz], body, sizeof(body)); echoSz += sizeof(body) - 1; strncpy(&command[echoSz], footer, sizeof(footer)); echoSz += sizeof(footer); if (SSL_write(ssl, command, echoSz) != echoSz) EchoError(ctx, ssl, sockfd, clientfd, "SSL_write failed"); break; } command[echoSz] = 0; #ifdef ECHO_OUT fputs(command, fout); #endif if (SSL_write(ssl, command, echoSz) != echoSz) EchoError(ctx, ssl, sockfd, clientfd, "SSL_write failed"); } SSL_shutdown(ssl); SSL_free(ssl); tcp_close(clientfd); } tcp_close(sockfd); DH_free(dh); SSL_CTX_free(ctx); ((func_args*)args)->return_code = 0; return 0; }
int LocateFaceBox::ProcessOptions(int argc, char** argv) { int n; int argc_old=argc; while (*argv[0]=='-' && argc>1) { switch (argv[0][1]) { case 't': if (argc<3){ EchoError("Not enough commandline arguments for switch -t"); break; } sscanf(argv[1], "%f", &_theta); argc--; argv++; break; case 'T': if (argc<3){ EchoError("Not enough commandline arguments for switch -T"); break; } sscanf(argv[1], "%f", &_tau); argc--; argv++; break; case 's': if (argc<3){ EchoError("Not enough commandline arguments for switch -s"); break; } n = sscanf(argv[1], "%f,%f,%f", &_scale_min, &_scale_augment, &_scale_max); if (n!=3 || _scale_min<WIDTH_BOX_FACIALPARTS || _scale_max<_scale_min || _scale_augment<=1) { EchoError("incorrect scale specification"); break; } argc--; argv++; break; case 'r': if (argc<3){ EchoError("Not enough commandline arguments for switch -r"); break; } float face_angle_min, face_angle_max; n = sscanf(argv[1], "%f,%f,%f", &face_angle_min, &_rotate_step, &face_angle_max); if (n!=3 || face_angle_max<face_angle_min || _rotate_step<=0) { EchoError("incorrect rotation specification"); break; } /// note the angle to be rotated is negative to the face angle _rotate_min = -face_angle_max; _rotate_max = -face_angle_min; argc--; argv++; break; case 'f': if (argc<3){ EchoError("Not enough commandline arguments for switch -f"); break; } _ffacemodel = string(argv[1]); argc--; argv++; break; case 'n': if (argc<3){ EchoError("Not enough commandline arguments for switch -n"); break; } _fnonfacemodel = string(argv[1]); argc--; argv++; break; default: EchoError(string("unknown option ")+argv[0]); } // switch argc--; argv++; } // while return argc_old-argc; }