]> Nishi Git Mirror - libw3.git/commitdiff
http
authornishi <nishi@d27a3e52-49c5-7645-884c-6793ebffc270>
Wed, 17 Jan 2024 10:44:43 +0000 (10:44 +0000)
committernishi <nishi@d27a3e52-49c5-7645-884c-6793ebffc270>
Wed, 17 Jan 2024 10:44:43 +0000 (10:44 +0000)
git-svn-id: file:///raid/svn-main/nishi-libw3/trunk@17 d27a3e52-49c5-7645-884c-6793ebffc270

Library/Core.c
Library/DNS.c
Library/HTTP.c
Library/Util.c
Library/W3Core.h
Library/W3Util.h

index 9becfa76e9f801137877ae0a33d897c70f1d0281..f115f0079ba98f276692b6bcb7778445747b3dd3 100644 (file)
@@ -53,6 +53,7 @@ struct W3* W3_Create(const char* protocol, const char* hostname, int port){
        w3->method = NULL;
        w3->path = NULL;
        w3->protocol = __W3_Strdup(protocol);
+       w3->hostname = __W3_Strdup(hostname);
        if(ssl) __W3_Debug("Protocol", "Enabled SSL");
        w3->sock = __W3_DNS_Connect(hostname, ssl, port
 #ifdef SSL_SUPPORT
@@ -85,5 +86,6 @@ void W3_Free(struct W3* w3){
        if(w3->method != NULL) free(w3->method);
        if(w3->path != NULL) free(w3->path);
        if(w3->protocol != NULL) free(w3->protocol);
+       if(w3->hostname != NULL) free(w3->hostname);
        free(w3);
 }
index 9e47dac13014e0f6ddfe06f34d008a4d4751293b..d74135e996f68867e0d679bedb5e67dac7031e75 100644 (file)
@@ -58,6 +58,8 @@ int __W3_DNS_Connect(const char* hostname, bool ssl, uint16_t port
        for(rp = result; rp != NULL; rp = rp->ai_next){
                sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
                if(sock == -1) continue;
+               int nzero = 0;
+               setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &nzero, sizeof(nzero));
                if(connect(sock, rp->ai_addr, rp->ai_addrlen) != -1) break;
                close(sock);
        }
index 690e379726dbbf401c78b89904a4bf97d9b72c2e..4be8a05ba38d9719a75c6bf373ac597eb0a29989 100644 (file)
@@ -4,6 +4,18 @@
 #include "W3Core.h"
 #include "W3Util.h"
 
+#include <string.h>
+
 void __W3_HTTP_Request(struct W3* w3){
        __W3_Debug("LibW3-HTTP", "Sending the request");
+       __W3_Auto_Write(w3, w3->method, strlen(w3->method));
+       __W3_Auto_Write(w3, " ", 1);
+       __W3_Auto_Write(w3, w3->path, strlen(w3->path));
+       __W3_Auto_Write(w3, " ", 1);
+       __W3_Auto_Write(w3, "HTTP/1.1", 8);
+       __W3_Auto_Write(w3, "\r\n", 2);
+       __W3_Auto_Write(w3, "Host: ", 6);
+       __W3_Auto_Write(w3, w3->hostname, strlen(w3->hostname));
+       __W3_Auto_Write(w3, "\r\n", 2);
+       __W3_Auto_Write(w3, "\r\n", 2);
 }
index de0055d28f7011eecb9181042bd7b3a0845d20e5..fba72f2fc597c716e246682e8b541b353fc5e6c0 100644 (file)
@@ -1,6 +1,8 @@
 /* $Id$ */
 #include "W3Util.h"
 
+#include "W3Core.h"
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <netinet/in.h>
 #endif
 
+#ifdef SSL_SUPPORT
+#include <openssl/ssl.h>
+#endif
+
 #define __DEBUG_LEN 12
 
 void __W3_Debug(const char* title, const char* message){
@@ -45,3 +51,27 @@ char* __W3_Strdup(const char* str){
        memcpy(result, str, strlen(str) + 1);
        return result;
 }
+
+unsigned long __W3_Auto_Write(struct W3* w3, char* data, unsigned long length){
+#ifdef SSL_SUPPORT
+       if(w3->ssl != NULL){
+               return SSL_write(w3->ssl, data, length);
+       }else{
+               return send(w3->sock, data, length, 0);
+       }
+#else
+       return send(w3->sock, data, length, 0);
+#endif
+}
+
+unsigned long __W3_Auto_Read(struct W3* w3, char* data, unsigned long length){
+#ifdef SSL_SUPPORT
+       if(w3->ssl != NULL){
+               return SSL_read(w3->ssl, data, length);
+       }else{
+               return recv(w3->sock, data, length, 0);
+       }
+#else
+       return recv(w3->sock, data, length, 0);
+#endif
+}
index a232ae4bd120123e2b2f5d207a9c6d2f00be97bb..b0c2c1abfcf227d18f5f31a478e28160c852316f 100644 (file)
@@ -11,6 +11,7 @@ struct W3 {
        char* protocol; /* As you can read from its name */
        char* method;   /* Used in HTTP */
        char* path;     /* As you can read from its name */
+       char* hostname; /* As you can read from its name */
 #ifdef SSL_SUPPORT
        void* ssl;      /* Actually SSL*, NULL if no SSL */
        void* ssl_ctx;  /* Actually SSL_CTX* */
index 11566552ca923b797a7d93ad15f5bf64677fed08..37c99da54abb76aaec5cf7babbe7db4392410fa6 100644 (file)
@@ -2,9 +2,13 @@
 #ifndef __W3UTIL_H__
 #define __W3UTIL_H__
 
+#include "W3Core.h"
+
 void __W3_Debug(const char* title, const char* message);
 char* __W3_Concat(const char* str1, const char* str2);
 char* __W3_Concat3(const char* str1, const char* str2, const char* str3);
 char* __W3_Strdup(const char* str);
+unsigned long __W3_Auto_Write(struct W3* w3, char* data, unsigned long length);
+unsigned long __W3_Auto_Read(struct W3* w3, char* data, unsigned long length);
 
 #endif