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; }
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; }
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; }