refactor initial code and accept a UDP request
This commit is contained in:
parent
fb762b2aef
commit
ee64c84ea4
10 changed files with 96 additions and 25 deletions
14
src/dns_packet_buffer.c
Normal file
14
src/dns_packet_buffer.c
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#include "dns_packet_buffer.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
struct DNSPacketBuffer *new_dns_packet_buffer()
|
||||
{
|
||||
struct DNSPacketBuffer *buf;
|
||||
buf = malloc(sizeof(struct DNSPacketBuffer));
|
||||
return buf;
|
||||
}
|
||||
|
||||
struct DNSPacketHeader *dns_header(struct DNSPacketBuffer)
|
||||
{
|
||||
|
||||
}
|
||||
3
src/dns_request.c
Normal file
3
src/dns_request.c
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#include "dns_request.h"
|
||||
|
||||
|
||||
10
src/main.c
10
src/main.c
|
|
@ -1,11 +1,13 @@
|
|||
#include <stdio.h>
|
||||
#include "packet_buffer.h"
|
||||
|
||||
#include "udp_server.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
struct PacketBuffer *buf = new_packet_buffer();
|
||||
|
||||
printf("size: %ld\n", sizeof(buf->buf));
|
||||
if (start_server() != 0) {
|
||||
perror("couldn't start UDP server");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
#include "packet_buffer.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
struct PacketBuffer *new_packet_buffer()
|
||||
{
|
||||
struct PacketBuffer *buf;
|
||||
buf = malloc(sizeof(struct PacketBuffer));
|
||||
return buf;
|
||||
}
|
||||
47
src/udp_server.c
Normal file
47
src/udp_server.c
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#include "udp_server.h"
|
||||
#include "dns_packet_buffer.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
int start_server()
|
||||
{
|
||||
struct DNSPacketBuffer *pb = new_dns_packet_buffer();
|
||||
|
||||
struct sockaddr_in servaddr = {0};
|
||||
|
||||
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
|
||||
if (sockfd == -1)
|
||||
{
|
||||
perror("failed to create socket");
|
||||
return -1;
|
||||
}
|
||||
|
||||
servaddr.sin_family = AF_INET;
|
||||
servaddr.sin_port = htons(UDP_PORT);
|
||||
servaddr.sin_addr.s_addr = INADDR_ANY;
|
||||
|
||||
int rc = bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr));
|
||||
|
||||
if (rc == -1)
|
||||
{
|
||||
perror("failed to bind");
|
||||
close(sockfd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
socklen_t len = 0;
|
||||
|
||||
int n = recvfrom(sockfd, (char *)pb->buf, sizeof(pb->buf), MSG_WAITALL, 0, &len);
|
||||
|
||||
printf("%s", pb->buf);
|
||||
|
||||
close(sockfd);
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue