/** * Start Handler for the Expat parser. */ void start_handler(void* data, const XML_Char* name, const XML_Char** attributes) { struct state_t* state = (struct state_t*)data; struct conversion_t* c; unsigned i; ++state->depth; if (state->depth < DEPTH_MAX) { state->level[state->depth].tag = name; state->level[state->depth].data = 0; state->level[state->depth].len = 0; if (state->error == 0) { c = identify(state->depth, state->level); if (c) { state->level[state->depth].process = c->process; state->level[state->depth].process(state, token_open, 0, 0, attributes); } else { state->level[state->depth].process = 0; } for(i=0;attributes[i];i+=2) { const char* null_atts[1] = { 0 }; start_handler(data, attributes[i], null_atts); data_handler(data, attributes[i+1], strlen(attributes[i+1])); end_handler(data, attributes[i]); } } else { state->level[state->depth].process = 0; } } }
int main() { HANDLER handler; MSG* msg; int i=0; if (start_handler(&handler, my_process_message)!=0) { LOGE("start handler failed!"); return -1; } sleep(3); msg = obtain_message(&handler, 1, "TEST", strlen("TEST")); send_message_delay(msg, 4*1000); msg = obtain_message(&handler, 3, "TEST", strlen("TEST")); send_message_delay(msg, 5*1000); /* while(1) { for (i=0; i<9; i++) { LOGV("++ obtain message: %d\n", i); msg = obtain_message(&handler, i, "TEST", strlen("TEST")); if (msg) { LOGV("++ send_message_delay: %d\n", i); sleep(1); send_message_delay(msg, i*1000); } } } */ while(1); return 0; }
int main (int argc, char *argv[]) { INIT_SECURITY_INTERFACE pInitSecurityInterface; // set buffer width of console setw (300); puts ("\n [ cms v0.1 - Copyleft 2015 (x) @Odzhan\n"); // set up default values args.address = NULL; args.ai_family = AF_INET; args.port = DEFAULT_PORT; args.port_nbr = atoi(args.port); pInitSecurityInterface = (INIT_SECURITY_INTERFACE)GetProcAddress(LoadLibrary("Secur32"), "InitSecurityInterfaceA" ); if (pInitSecurityInterface==NULL) printf ("didn't resolve"); sspi = pInitSecurityInterface(); // process command line parse_args(argc, argv); // resolve address and open socket if (open_tcp ()) { start_handler (); // create credentials if (create_creds()==SEC_E_OK) { // connect to server if (connect (s, ai_addr, ai_addrlen) != SOCKET_ERROR) { // perform the handshake if (chs () == SEC_E_OK) { printf (" [ connected\n\n"); secure_info(); ss=sspi->QueryContextAttributes (&hContext, SECPKG_ATTR_STREAM_SIZES, &Sizes ); cbBufferLen = Sizes.cbHeader + Sizes.cbMaximumMessage + Sizes.cbTrailer; pbBufferIn = LocalAlloc(LMEM_FIXED, cbBufferLen); pbBufferOut = LocalAlloc(LMEM_FIXED, cbBufferLen); pbDataIn=pbBufferIn + Sizes.cbHeader; pbDataOut=pbBufferOut + Sizes.cbHeader; cbBufferLen = Sizes.cbMaximumMessage; printf (" [ running cmd\n"); cmd(); } else { printf (" [ handshake failed\n"); } } else { printf (" [ unable to connect\n"); } } else { printf (" [ error creating credentials\n"); } stop_handler (); close_tcp(); } return 0; }