コード例 #1
0
ファイル: ottd.c プロジェクト: Bubelbub/qstat
query_status_t deal_with_ottdmaster_packet(struct qserver *server, char *rawpkt, int pktlen)
{
	unsigned num;
	server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
	server->server_name = MASTER;

	if(swap_short_from_little(rawpkt) != pktlen)
	{
		malformed_packet( server, "invalid packet length" );
		return PKT_ERROR;
	}
	if(rawpkt[2] != 7)
	{
		malformed_packet( server, "invalid packet type" );
		return PKT_ERROR;
	}

	if(rawpkt[3] != 1)
	{
		malformed_packet( server, "invalid packet version" );
		return PKT_ERROR;
	}

	num = swap_short_from_little(&rawpkt[4]);
	rawpkt += 6;
	pktlen -= 6;
	if( num && num*6 <= pktlen )
	{
		unsigned i;
		server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len + pktlen );
		memset(server->master_pkt + server->master_pkt_len, 0, pktlen );
		server->master_pkt_len += pktlen;
		for( i = 0; i < num * 6; i += 6 )
		{
			memcpy(&server->master_pkt[i], &rawpkt[i], 4);
			server->master_pkt[i+4] = rawpkt[i+5];
			server->master_pkt[i+5] = rawpkt[i+4];
		}
		server->n_servers += num;
	}
	else
	{
		malformed_packet( server, "invalid packet" );
		return PKT_ERROR;
	}

	bind_sockets();

	return DONE_AUTO;
}
コード例 #2
0
ファイル: rrb.c プロジェクト: topromulan/RRB
int main(void) {

	int input, output; 

	create_sockets(&input, &output);
	bind_sockets("wlan0", input, "lo", output);

	/* main program part.. */

	frame_t work;
	
	struct pollfd pollinput;
	pollinput.fd = input;
	pollinput.events = POLLIN;

	int mswait;

	while ( 1 ) {
		printf("%40d frames in buffer.\r", count_frames());

		work.length = read(input, work.data.buffer, BIGGEST_FRAME);

		if ( work.length > 0 ) {
			translate_frame(&work);
			schedule_frame(&work);
			queue_frame(&work);

			// freaking woo hoo
		}
		
		dole_frame(output);
		mswait = ttn_frame();

		poll(&pollinput, 1, mswait);
	}

	return 0;
}
コード例 #3
0
ファイル: server.c プロジェクト: shubham0473/sem6
int main(int argc , char *argv[])
{
    int read_size;
    // struct sockaddr_in server , client;
    char client_message[BUF_SIZE];
    char server_message[BUF_SIZE];
    int type=0;
    char head[100], body[1000], date[20];
    char query[10000];

    init_ports();
    bind_sockets();

    int parent_pid = getpid();
    int child_tcp_pid;

    if((child_tcp_pid = fork())==0){
        //UDP
        MYSQL *conn;
        MYSQL_RES *res;
        MYSQL_ROW row;
        conn = mysql_init(NULL);
        char query[1000];
        /* Connect to database */
        if (!mysql_real_connect(conn, server,
            user, password, database, 0, NULL, 0)) {
                fprintf(stderr, "%s\n", mysql_error(conn));
                return 0;
            }

        char buf[BUF_SIZE] = {'\0'};
        int b_recv   = 0; // Number of bytes received.
        int flags = 0;
        int server_UDP_flag = 0;
        // Flags for recvfrom.
        while(1){
            b_recv = recvfrom(sock_UDP, buf, BUF_SIZE, flags, (struct sockaddr *)&client_UDP, &addrlen);
            if (b_recv == -1)
            {
                perror ("Server: recvfrom failed");
                exit (1);
            }

            // printf ("password received\n"); //////////////////USE IN SQL QUERY
            // if(strcmp("DS1lxBt1j0ltM", buf) == 0){
            //     printf("successfully logged in\n");
            //     server_UDP_flag = sendto(sock_UDP, "OK", strlen("OK"), flags, (struct sockaddr *)&client_UDP, sizeof (struct sockaddr_in));
            //     if (server_UDP_flag < 0)
            //     {
            //         perror ("Server: Sendto function call failed");
            //         exit (1);
            //     }
            //
            // }
            // else{
            //     server_UDP_flag = sendto(sock_UDP, "NOT OK", strlen("NOT OK"), flags, (struct sockaddr *)&client_UDP, sizeof (struct sockaddr_in));
            //     if (server_UDP_flag < 0)
            //     {
            //         perror ("Server: Sendto function call failed");
            //         exit (1);
            //     }
            //
            // }


            // b_recv = recvfrom(sock_UDP, buf, BUF_SIZE, flags, (struct sockaddr *)&client_UDP, &addrlen);
            // if (b_recv == -1)
            // {
            //     perror ("Server: recvfrom failed");
            //     exit (1);
            // }

            printf ("Date received = |%s|\n", buf); //////////////////USE IN SQL QUERY
            sprintf(query, "DELETE FROM tb_news WHERE tb_news.news_date < %s", buf);
            printf("%s\n", query);
            if (mysql_query(conn, query)) {
                fprintf(stderr, "%s\n", mysql_error(conn));
                exit(1);
            }
            res = mysql_use_result(conn);
            printf("Deleted\n");

            server_UDP_flag = sendto(sock_UDP, "QUERY OK", strlen("QUERY OK"), flags, (struct sockaddr *)&client_UDP, sizeof (struct sockaddr_in));
            if (server_UDP_flag < 0)
            {
                perror ("Server: Sendto function call failed");
                exit (1);
            }
        }



        /****************** Close ****************************************/
        status_UDP = close (sock_UDP); // Close the socket file descriptor.
        if (status_UDP < 0)
        {
            perror ("Server close failed");
            exit (1);
        }
        mysql_free_result(res);
        mysql_close(conn);
        exit(0);

    }
    else
    {
        //TCP
        listen(sock_TCP , 3);
        int child;
        //Accept and incoming connection

        //accept connection from an incoming client


        while(1){
            puts("Waiting for incoming connections...");
            sock_TCP_client = accept(sock_TCP, (struct sockaddr *)&client_TCP, (socklen_t*)&addrlen);
            if (sock_TCP_client < 0)
            {
                perror("accept failed");
                return 1;
            }
            if((child = fork())==0){
                puts("Connection accepted");
                MYSQL *conn;
                MYSQL_RES *res;
                MYSQL_ROW row;
                conn = mysql_init(NULL);
                /* Connect to database */
                if (!mysql_real_connect(conn, server,
                    user, password, database, 0, NULL, 0)) {
                        fprintf(stderr, "%s\n", mysql_error(conn));
                        return 0;
                    }
                read_size = recv(sock_TCP_client, client_message, 2000, 0);
                printf("%s\n", client_message);
                if(client_message){
                    if(strcmp(client_message, "reporter") == 0) {
                        write(sock_TCP_client, "ok", strlen("ok"));
                        read_size = recv(sock_TCP_client, client_message, 2000, 0);
                        if(strcmp(client_message, "academic") == 0) type = ACADEMIC;
                        else type = NON_ACADEMIC;
                        read_size = recv(sock_TCP_client, client_message, 2000, 0);
                        strcpy(date, client_message);
                        read_size = recv(sock_TCP_client, client_message, 2000, 0);
                        strcpy(head, client_message);
                        read_size = recv(sock_TCP_client, client_message, 2000, 0);
                        strcpy(body, client_message);
                        sprintf(query, "INSERT INTO tb_news (head, body, news_date, type) VALUES ('%s', '%s', '%s', %d)"  , head, body, date, type);
                        printf("%s\n", query);
                        if (mysql_query(conn, query)) {
                            fprintf(stderr, "%s\n", mysql_error(conn));
                            exit(1);
                        }
                        res = mysql_use_result(conn);

                    }
                    else if(strcmp(client_message, "reader") == 0){
                        write(sock_TCP_client, "ok", strlen("ok"));
                        read_size = recv(sock_TCP_client, client_message, 2000, 0);
                        if(strcmp(client_message, "academic") == 0) type = ACADEMIC;
                        else if(strcmp(client_message, "non-academic") == 0) type = NON_ACADEMIC;
                        printf("%d\n", type);
                        sprintf(query, "SELECT newsID, head FROM tb_news WHERE tb_news.type = %d ORDER BY tb_news.news_date DESC", type);
                        if (mysql_query(conn, query)) {
                            fprintf(stderr, "%s\n", mysql_error(conn));
                            exit(1);
                        }
                        res = mysql_use_result(conn);
                        while ((row = mysql_fetch_row(res)) != NULL){
                            sprintf(server_message, "%s | %s\n", row[0], row[1]);
                            write(sock_TCP_client, server_message, strlen(server_message));
                            recv(sock_TCP_client, client_message, 2000, 0);
                            if(strcmp(client_message, "ok") != 0) break;
                        }
                        sprintf(server_message, "%s", "END\0");
                        write(sock_TCP_client, server_message, strlen(server_message));
                        memset(client_message, 0, sizeof(client_message));
                        read_size = recv(sock_TCP_client, client_message, 2000, 0);
                        int opt = atoi(client_message);
                        sprintf(query, "SELECT * FROM tb_news WHERE tb_news.newsID = %d", opt);
                        if (mysql_query(conn, query)) {
                            fprintf(stderr, "%s\n", mysql_error(conn));
                            exit(1);
                        }
                        res = mysql_use_result(conn);
                        row = mysql_fetch_row(res);
                        sprintf(server_message, "newsID %s : %s\n\n%s\n%s\n", row[0], row[1], row[2], row[3]);
                        write(sock_TCP_client, server_message, strlen(server_message));

                    }

                    if(read_size == 0)
                    {
                        puts("Client disconnected");
                        fflush(stdout);
                    }
                    else if(read_size == -1)
                    {
                        perror("recv failed");
                    }
                    mysql_free_result(res);
                    mysql_close(conn);
                    close(sock_TCP);
                    exit(0);

                }

            }

        }

        exit(0);

    }
    close(sock_UDP);
    return 0;

}