コード例 #1
0
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);
}
コード例 #2
0
ファイル: bomber.c プロジェクト: chixsh/tempesta
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);
}
コード例 #3
0
/**
 * \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;
}