]> Nishi Git Mirror - libw3.git/commitdiff
post works
authornishi <nishi@d27a3e52-49c5-7645-884c-6793ebffc270>
Sun, 21 Jan 2024 16:21:48 +0000 (16:21 +0000)
committernishi <nishi@d27a3e52-49c5-7645-884c-6793ebffc270>
Sun, 21 Jan 2024 16:21:48 +0000 (16:21 +0000)
git-svn-id: file:///raid/svn-main/nishi-libw3/trunk@42 d27a3e52-49c5-7645-884c-6793ebffc270

Example/fetch.c
Library/Core.c
Library/HTTP.c
Library/W3Core.h
W3Version.h.p

index 26ea3938e38ce73a565a419ded4ad840d44b6106..11b2e46b8a8bb40d94a6a7f9f33933695f1bcf01 100644 (file)
@@ -32,17 +32,20 @@ int main(int argc, char** argv){
                return 0;
        }
        if(argc < 3){
-               fprintf(stderr, "Usage: %s URL Path\n", argv[0]);
+               fprintf(stderr, "Usage: %s URL Path [method [data]]\n", argv[0]);
                return 1;
        }
        W3_Library_Init();
        struct W3* w3 = W3_Create("http", argv[1], 80);
        if(w3 != NULL){
-               W3_Set_Method(w3, "GET");
+               W3_Set_Method(w3, argv[3] == NULL ? "GET" : argv[3]);
                W3_Set_Path(w3, argv[2]);
                W3_On(w3, "status", (void*)status);
                W3_On(w3, "data", (void*)fetch_data);
                W3_On(w3, "header", (void*)header);
+               if(argv[3] != NULL && strcmp(argv[3], "POST") == 0 && argv[4] != NULL){
+                       W3_Set_Data(w3, argv[4], strlen(argv[4]));
+               }
                W3_Send_Request(w3);
                W3_Free(w3);
        }else{
index 02fbc80e65956631b101e4e48f619f290ef02d38..5e284a3a092cdf749c04fd444ccb373619bbdc99 100644 (file)
@@ -56,6 +56,8 @@ struct W3* W3_Create(const char* protocol, const char* hostname, int port){
        w3->headers = NULL;
        w3->protocol = __W3_Strdup(protocol);
        w3->hostname = __W3_Strdup(hostname);
+       w3->size = 0;
+       w3->data = NULL;
        if(ssl) __W3_Debug("Protocol", "Enabled SSL");
        w3->sock = __W3_DNS_Connect(hostname, ssl, port
 #ifdef SSL_SUPPORT
@@ -87,6 +89,11 @@ void W3_Send_Request(struct W3* w3){
        }
 }
 
+void W3_Set_Data(struct W3* w3, char* data, size_t size){
+       w3->data = data;
+       w3->size = size;
+}
+
 void W3_Set_Header(struct W3* w3, const char* key, const char* value){
        char* tmp = __W3_Concat3("Setting the header `", key, "` to `");
        char* str = __W3_Concat3(tmp, value, "`");
index e8f5ec5e5bb5b578f6cdeddd92e52a45c53b91d2..3d697af1a0b69b845328af0fc895b7f3bdfe9a82 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <stdio.h>
 
 void __W3_HTTP_Request(struct W3* w3){
        __W3_Debug("LibW3-HTTP", "Sending the request");
@@ -36,14 +37,26 @@ void __W3_HTTP_Request(struct W3* w3){
                int i;
                for(i = 0; w3->headers[i] != NULL; i += 2){
                        if(strcmp(w3->headers[i], "connection") == 0) continue;
+                       if(strcmp(w3->headers[i], "content-length") == 0) continue;
                        __W3_Auto_Write(w3, w3->headers[i], strlen(w3->headers[i]));
                        __W3_Auto_Write(w3, ": ", 2);
                        __W3_Auto_Write(w3, w3->headers[i + 1], strlen(w3->headers[i + 1]));
                        __W3_Auto_Write(w3, "\r\n", 2);
                }
        }
+       if(w3->data != NULL){
+               char* len = malloc(129);
+               memset(len, 0, 129);
+               sprintf(len, "%d", w3->size);
+               __W3_Auto_Write(w3, "content-length: ", 16);
+               __W3_Auto_Write(w3, len, strlen(len));
+               __W3_Auto_Write(w3, "\r\n", 2);
+               free(len);
+       }
        __W3_Auto_Write(w3, "\r\n", 2);
-       __W3_Auto_Write(w3, "\r\n", 2);
+       if(w3->data != NULL){
+               __W3_Auto_Write(w3, w3->data, w3->size);
+       }
        char* buf = malloc(512);
        char* statusbuf = malloc(1);
        statusbuf[0] = 0;
index 3927f55135f2996f7940c91efd605ae6fccffec9..b4220399242df9d8cc0b91ee0f6ce1dade51c2a5 100644 (file)
@@ -6,6 +6,7 @@
 extern "C" {
 #endif
 
+#include <stddef.h>
 #include <stdbool.h>
 
 #include "W3Version.h"
@@ -19,6 +20,8 @@ struct W3 {
        char** headers; /* As you can read from its name */
        void** events;  /* As you can read from its name */ 
        int status;     /* As you can read from its name */ 
+       char* data;     /* As you can read from its name */
+       size_t size;    /* Size of the data */
 #ifdef SSL_SUPPORT
        void* ssl;      /* Actually SSL*, NULL if no SSL */
        void* ssl_ctx;  /* Actually SSL_CTX* */
@@ -34,6 +37,7 @@ void W3_Send_Request(struct W3* w3);                                          /* Send the request */
 void W3_Set_Header(struct W3* w3, const char* key, const char* value);         /* Set the header */
 void W3_Free(struct W3* w3);                                                   /* Free the struct */
 void W3_On(struct W3* w3, const char* eventname, void* func);                  /* Set Handlers */
+void W3_Set_Data(struct W3* w3, char* data, size_t size);                      /* Send the data - LibW3 won't free the data */
 
 #ifdef __cplusplus
 }
index b2622b06002cd216406a2c1ac5544670cefa7adf..7b001b1267e51b52c81e5c76f7b414a458f66f60 100644 (file)
@@ -6,7 +6,7 @@
 extern "C" {
 #endif
 
-#define LIBW3_VERSION "1.0" \
+#define LIBW3_VERSION "1.1" \
 SUFFIX
 
 #ifdef __cplusplus