aboutsummaryrefslogtreecommitdiff
path: root/test/bsd_socket.c
diff options
context:
space:
mode:
authorWolfgang Draxinger <Wolfgang.Draxinger@physik.uni-muenchen.de>2013-07-19 17:33:47 +0200
committerWolfgang Draxinger <Wolfgang.Draxinger@physik.uni-muenchen.de>2013-07-19 17:33:47 +0200
commit1f958fc608ea5c468c04d27e0029ae298f920134 (patch)
treec0ddd226fd86be6e087e4b207ddda604ec2c7416 /test/bsd_socket.c
parenta32672d18e889fe5020400edc591350f50f2af41 (diff)
parentd62d604877249f1eeaf920b3f149eb906b24cd16 (diff)
downloadlitheweb-1f958fc608ea5c468c04d27e0029ae298f920134.tar.gz
litheweb-1f958fc608ea5c468c04d27e0029ae298f920134.tar.bz2
merged
Diffstat (limited to 'test/bsd_socket.c')
-rw-r--r--test/bsd_socket.c224
1 files changed, 0 insertions, 224 deletions
diff --git a/test/bsd_socket.c b/test/bsd_socket.c
deleted file mode 100644
index 02ee592..0000000
--- a/test/bsd_socket.c
+++ /dev/null
@@ -1,224 +0,0 @@
-#define _BSD_SOURCE
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-
-#include <unistd.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/ip.h>
-
-#include "../picohttp.h"
-
-int bsdsock_read(size_t count, char *buf, void *data)
-{
- int fd = *((int*)data);
-
- ssize_t rb = 0;
- ssize_t r = 0;
- do {
- r = read(fd, buf+rb, count-rb);
- if( 0 < r ) {
- rb += r;
- continue;
- }
- if( !r ) {
- break;
- }
-
- if( EAGAIN == errno ||
- EWOULDBLOCK == errno ) {
- usleep(100);
- continue;
- }
- return -3 + errno;
- } while( rb < count );
- return rb;
-}
-
-int bsdsock_write(size_t count, char const *buf, void *data)
-{
- int fd = *((int*)data);
-
- ssize_t wb = 0;
- ssize_t w = 0;
- do {
- w = write(fd, buf+wb, count-wb);
- if( 0 < w ) {
- wb += w;
- continue;
- }
- if( !w ) {
- break;
- }
-
- if( EAGAIN == errno ||
- EWOULDBLOCK == errno ) {
- usleep(100);
- continue;
- }
- return -3 + errno;
- } while( wb < count );
- return wb;
-}
-
-int16_t bsdsock_getch(void *data)
-{
- char ch;
- if( 1 != bsdsock_read(1, &ch, data) )
- return -1;
- return ch;
-}
-
-int bsdsock_putch(char ch, void *data)
-{
- return bsdsock_write(1, &ch, data);
-}
-
-int bsdsock_flush(void* data)
-{
- return 0;
-}
-
-int sockfd = -1;
-
-void bye(void)
-{
- fputs("exiting\n", stderr);
- int const one = 1;
- /* allows for immediate reuse of address:port
- * after program termination */
- setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
- shutdown(sockfd, SHUT_RDWR);
- close(sockfd);
-}
-
-void rhRoot(struct picohttpRequest *req)
-{
- fprintf(stderr, "handling request /%s\n", req->urltail);
-
- req->response.contenttype = "text/html";
-
- char http_test[] = "<html><head><title>handling request /</title></head>\n<body><a href=\"/test\">/test</a></body></html>\n";
-
- picohttpResponseWrite(req, sizeof(http_test)-1, http_test);
-}
-
-void rhTest(struct picohttpRequest *req)
-{
- fprintf(stderr, "handling request /test%s\n", req->urltail);
-
- char http_test[] = "handling request /test";
- picohttpResponseWrite(req, sizeof(http_test)-1, http_test);
- if(req->urltail) {
- picohttpResponseWrite(req, strlen(req->urltail), req->urltail);
- }
-}
-
-static uint8_t const favicon_ico[] = {
-0x00,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x10,0x00,0x01,0x00,0x04,0x00,0x28,0x01,
-0x00,0x00,0x16,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,
-0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x09,
-0x06,0x00,0x21,0x23,0x22,0x00,0x48,0x4a,0x48,0x00,0x70,0x73,0x71,0x00,0x8d,0x90,
-0x8e,0x00,0xb4,0xb7,0xb5,0x00,0xd8,0xdc,0xda,0x00,0xfc,0xff,0xfd,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,
-0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x76,0x06,0x76,0x06,0x77,0x77,0x77,
-0x77,0x74,0x04,0x74,0x04,0x77,0x77,0x77,0x77,0x72,0x42,0x72,0x42,0x77,0x77,0x77,
-0x77,0x71,0x70,0x70,0x71,0x77,0x70,0x77,0x77,0x52,0x72,0x32,0x72,0x57,0x70,0x77,
-0x77,0x34,0x74,0x04,0x74,0x37,0x70,0x77,0x77,0x16,0x76,0x06,0x76,0x17,0x70,0x40,
-0x03,0x77,0x77,0x77,0x77,0x77,0x70,0x26,0x62,0x37,0x77,0x77,0x77,0x77,0x70,0x67,
-0x76,0x17,0x77,0x77,0x77,0x77,0x70,0x77,0x77,0x07,0x77,0x77,0x77,0x77,0x70,0x67,
-0x76,0x17,0x77,0x77,0x77,0x77,0x70,0x26,0x62,0x37,0x77,0x77,0x77,0x77,0x70,0x40,
-0x03,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-};
-
-void rhFavicon(struct picohttpRequest *req)
-{
- fprintf(stderr, "handling request /favicon.ico\n");
-
- req->response.contenttype = "image/x-icon";
- req->response.contentlength = sizeof(favicon_ico);
- picohttpResponseWrite(req, sizeof(favicon_ico), favicon_ico);
-}
-
-int main(int argc, char *argv[])
-{
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- if( -1 == sockfd ) {
- perror("socket");
- return -1;
- }
-#if 0
- if( atexit(bye) ) {
- return -1;
- }
-#endif
-
- struct sockaddr_in addr = {
- .sin_family = AF_INET,
- .sin_port = htons(8000),
- .sin_addr = 0
- };
-
- int const one = 1;
- setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
- if( -1 == bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) ) {
- perror("bind");
- return -1;
- }
-
- if( -1 == listen(sockfd, 2) ) {
- perror("listen");
- return -1;
- }
-
- for(;;) {
- socklen_t addrlen = 0;
- int confd = accept(sockfd, (struct sockaddr*)&addr, &addrlen);
- if( -1 == confd ) {
- if( EAGAIN == errno ||
- EWOULDBLOCK == errno ) {
- usleep(1000);
- continue;
- } else {
- perror("accept");
- return -1;
- }
- }
-
- struct picohttpIoOps ioops = {
- .read = bsdsock_read,
- .write = bsdsock_write,
- .getch = bsdsock_getch,
- .putch = bsdsock_putch,
- .flush = bsdsock_flush,
- .data = &confd
- };
-
- struct picohttpURLRoute routes[] = {
- {"/favicon.ico|", 0, rhFavicon, 0, PICOHTTP_METHOD_GET},
- { "/test", 0, rhTest, 16, PICOHTTP_METHOD_GET },
- { "/|", 0, rhRoot, 0, PICOHTTP_METHOD_GET },
- { NULL, 0, 0, 0, 0 }
- };
-
- picohttpProcessRequest(&ioops, routes);
-
- shutdown(confd, SHUT_RDWR);
- close(confd);
- }
-
- return 0;
-}
-