void *el_listenForEvents() { while(1) { memset(el_receiveBuffer, 0, BUFFER_SIZE); ss_receive(el_receiveBuffer, el_sockfd); //printf("el_rec: %s", el_receiveBuffer); if(strlen(el_receiveBuffer)!=0) { char *p; int id = atoi((char*)strtok_r(el_receiveBuffer," ", &p)); char* eventType = (char*)strtok_r(NULL," ", &p); char* eventString = (char*)strtok_r(NULL,"\n", &p); // printf("Got event %i %s %s\n",id, eventType,eventString); el_signalEvent(eventType, eventString); memset(el_replyBuffer, 0, BUFFER_SIZE); sprintf_take(); sprintf(el_replyBuffer, "%i OK 0\r\n", id); sprintf_release(); ss_send(el_replyBuffer, strlen(el_replyBuffer), el_sockfd); // printf("el_send: %s", el_replyBuffer); } else { printf("ERROR: In event listner null package received\n"); exit(0); //memset(el_replyBuffer, 0, BUFFER_SIZE); //sprintf(el_replyBuffer, "0 ERROR 0\r\n"); //ss_send(el_replyBuffer, strlen(el_replyBuffer), el_sockfd); } } printf("ERROR: Event thread exited\n"); pthread_exit(0); }
static void tfw_bmb_msg_send(int tn, int cn) { TfwBmbTask *task = &bmb_task[tn]; int fz_tries = 0, r; TfwStr msg; TfwHttpMsg req; TfwMsgIter it; BUG_ON(!task->conn[cn].sk); do { if (++fz_tries > 10) { TFW_ERR("Too many fuzzer tries to generate request\n"); return; } r = fuzz_gen(&task->ctx, task->buf, task->buf + BUF_SIZE, 0, 1, FUZZ_REQ); if (r < 0) { TFW_ERR("Cannot generate HTTP request, r=%d\n", r); return; } if (r == FUZZ_END) fuzz_init(&task->ctx, true); } while (r != FUZZ_VALID); msg.ptr = task->buf; msg.skb = NULL; msg.len = strlen(msg.ptr); msg.flags = 0; if (!tfw_http_msg_create(&req, &it, Conn_Clnt, msg.len)) { TFW_WARN("Cannot create HTTP request.\n"); return; } if (verbose) TFW_LOG("Send request:\n" "------------------------------\n" "%s\n" "------------------------------\n", task->buf); tfw_http_msg_write(&it, &req, &msg); ss_send(task->conn[cn].sk, &req.msg.skb_list, true); atomic_inc(&bmb_request_send); }
/** * \fn ss_send_to_address() * * \brief Sends data to the some URL-address. * * \param[in] const char *addrrss. Address (without protocol and path) to get IP address and send (ya.ru, google.ru). * \param[in] int port. Port to send. * \param[in] char *request. Request to send. * \param[in] char **result_buf. Buffer for response. * * \return int. 0 if successful, otherwise -1. */ int ss_send_to_address(const char *addrrss, const char *port, const char *request, char **result_buf) { struct addrinfo hints; struct addrinfo *ai = NULL;// ss_get_ip_address((char*)addrrss, (char*)port); memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; int result = getaddrinfo(addrrss, port, &hints, &ai); if (result != 0) { fprintf(stderr, "getaddrinfo() error: %s\n", gai_strerror(result)); return -1; } struct sockaddr_in *sin = (struct sockaddr_in *) (ai->ai_addr); const char *addr = inet_ntoa(sin->sin_addr); if (addr == NULL) { return -1; } sib_address_t sa; strncpy(sa.ip, addr, MAX_IP_LEN); sa.port = atoi(port); freeaddrinfo(ai); int sockfd = ss_open(&sa); if (ss_send(sockfd, (char *)request) < 0) { fprintf(stderr, "Sending error."); return -1; } if (ss_recv_sparql(sockfd, *result_buf, SS_RECV_TIMEOUT_MSECS) <= 0) { fprintf(stderr, "Receiving error."); return -1; } return 0; }