aboutsummaryrefslogtreecommitdiff
path: root/src/clientinfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/clientinfo.c')
-rw-r--r--src/clientinfo.c271
1 files changed, 20 insertions, 251 deletions
diff --git a/src/clientinfo.c b/src/clientinfo.c
index c640973c..0aa5e3b5 100644
--- a/src/clientinfo.c
+++ b/src/clientinfo.c
@@ -14,20 +14,16 @@
14 14
15#include "clientinfo.h" 15#include "clientinfo.h"
16 16
17
18struct ClientInfo *ClientInfo; // tochange
19
20/*********************************************************************************************************/ 17/*********************************************************************************************************/
21/* 18/*
22 * Initialize ClientInfo structure 19 * Initialize ClientInfo structure
23 */ 20 */
24void __ILWS_init_clientinfo() { 21void __ILWS_init_clientinfo(struct ClientInfo *ClientInfo) {
25 char *t; 22 char *t;
26 struct outstream *tstream=current_web_client->outstream; 23 struct outstream *tstream=current_web_client->outstream;
27 24
28 ClientInfo=__ILWS_malloc(sizeof(struct ClientInfo)); 25 ClientInfo=__ILWS_malloc(sizeof(struct ClientInfo));
29 if(ClientInfo==NULL) { 26 if(ClientInfo==NULL) {
30 LWSERR(LE_MEMORY);
31 return; 27 return;
32 }; 28 };
33 29
@@ -74,26 +70,24 @@ void __ILWS_init_clientinfo() {
74 70
75} 71}
76 72
77/*********************************************************************************************************/
78/* 73/*
79 * Free ClientInfo structure 74 * Free ClientInfo structure
80 */ 75 */
81void __ILWS_free_clientinfo() { 76void __ILWS_free_clientinfo(struct ClientInfo *ClientInfo) {
82 if(ClientInfo==NULL) { 77 if(ClientInfo==NULL) {
83 return; 78 return;
84 }; 79 };
85 __ILWS_delete_buffer_list(ClientInfo->mem); 80 __ILWS_delete_buffer_list(ClientInfo->mem);
86 81
87 __ILWS_free(ClientInfo); 82 __ILWS_free(ClientInfo);
88 ClientInfo=NULL; 83 ClientInfo=NULL;
89} 84}
90 85
91 86
92/*********************************************************************************************************/
93/* 87/*
94 * Header function for ClientInfo->Header("x") 88 * Header function for ClientInfo->Header("x")
95 */ 89 */
96char *__ILWS_Header(char *str) { 90char *__ILWS_Header(struct ClientInfo *ClientInfo, char *str) {
97 char *tmp1,*tmp2,*tmp3,*ret; 91 char *tmp1,*tmp2,*tmp3,*ret;
98 struct _Header *hl=ClientInfo->HeaderList; 92 struct _Header *hl=ClientInfo->HeaderList;
99 char *defret=""; 93 char *defret="";
@@ -106,7 +100,6 @@ char *__ILWS_Header(char *str) {
106 100
107 ClientInfo->HeaderList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Header)); 101 ClientInfo->HeaderList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Header));
108 if(ClientInfo->HeaderList==NULL) { 102 if(ClientInfo->HeaderList==NULL) {
109 LWSERR(LE_MEMORY);
110 return defret; 103 return defret;
111 }; 104 };
112 ClientInfo->HeaderList->next=NULL; 105 ClientInfo->HeaderList->next=NULL;
@@ -129,11 +122,9 @@ char *__ILWS_Header(char *str) {
129 /* Doesn't exists */ 122 /* Doesn't exists */
130 strsize=strlen(str); 123 strsize=strlen(str);
131 if(!(hl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Header)))) { 124 if(!(hl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Header)))) {
132 LWSERR(LE_MEMORY);
133 return defret; 125 return defret;
134 }; 126 };
135 if(!(hl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) { 127 if(!(hl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) {
136 LWSERR(LE_MEMORY);
137 return defret; 128 return defret;
138 }; 129 };
139 130
@@ -143,7 +134,6 @@ char *__ILWS_Header(char *str) {
143 hl->next->next=NULL; 134 hl->next->next=NULL;
144 135
145 if(!(tmp3=__ILWS_malloc(strsize+3))) { 136 if(!(tmp3=__ILWS_malloc(strsize+3))) {
146 LWSERR(LE_MEMORY);
147 return defret; 137 return defret;
148 }; 138 };
149 snprintf(tmp3,strsize+3,"%s: ",str); 139 snprintf(tmp3,strsize+3,"%s: ",str);
@@ -169,13 +159,10 @@ char *__ILWS_Header(char *str) {
169 return ret; 159 return ret;
170} 160}
171 161
172
173
174/*********************************************************************************************************/
175/* 162/*
176 * Function for Querydata 163 * Function for Querydata
177 */ 164 */
178char *__ILWS_Query(char *handle) { 165char *__ILWS_Query(struct ClientInfo *ClientInfo, char *handle) {
179 char *tmp1,*tmp2,*tmp3,*tmp4,*ret; 166 char *tmp1,*tmp2,*tmp3,*tmp4,*ret;
180 char *defret=""; 167 char *defret="";
181 size_t strsize; 168 size_t strsize;
@@ -198,7 +185,6 @@ char *__ILWS_Query(char *handle) {
198 if(ClientInfo->QueryList==NULL) { 185 if(ClientInfo->QueryList==NULL) {
199 ClientInfo->QueryList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Query)); 186 ClientInfo->QueryList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Query));
200 if(ClientInfo->QueryList==NULL) { 187 if(ClientInfo->QueryList==NULL) {
201 LWSERR(LE_MEMORY);
202 if(rw) return 0; 188 if(rw) return 0;
203 return defret; 189 return defret;
204 }; 190 };
@@ -301,13 +287,11 @@ char *__ILWS_Query(char *handle) {
301 // Working here ^ 287 // Working here ^
302 ql->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Query)); 288 ql->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Query));
303 if(ql->next==NULL) { 289 if(ql->next==NULL) {
304 LWSERR(LE_MEMORY);
305 if(handle[0]=='#') rw=1; 290 if(handle[0]=='#') rw=1;
306 return defret; 291 return defret;
307 }; 292 };
308 ql->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1); 293 ql->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1);
309 if(ql->next->id==NULL) { 294 if(ql->next->id==NULL) {
310 LWSERR(LE_MEMORY);
311 if(handle[0]=='#') rw=1; 295 if(handle[0]=='#') rw=1;
312 return defret; 296 return defret;
313 }; 297 };
@@ -339,7 +323,6 @@ char *__ILWS_Query(char *handle) {
339 323
340 ql->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1); 324 ql->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1);
341 if(ql->next->data==NULL) { 325 if(ql->next->data==NULL) {
342 LWSERR(LE_MEMORY);
343 if(handle[0]=='#') rw=1; 326 if(handle[0]=='#') rw=1;
344 return defret; 327 return defret;
345 }; 328 };
@@ -353,7 +336,6 @@ char *__ILWS_Query(char *handle) {
353 336
354 tmp1=__ILWS_malloc(3); 337 tmp1=__ILWS_malloc(3);
355 if(tmp1==NULL) { 338 if(tmp1==NULL) {
356 LWSERR(LE_MEMORY);
357 if(rw) return 0; 339 if(rw) return 0;
358 return defret; 340 return defret;
359 }; 341 };
@@ -378,13 +360,10 @@ char *__ILWS_Query(char *handle) {
378 return ret; 360 return ret;
379} 361}
380 362
381
382
383/*********************************************************************************************************/
384/* 363/*
385 * Function for Postdata 364 * Function for Postdata
386 */ 365 */
387char *__ILWS_Post(char *handle) { 366char *__ILWS_Post(struct ClientInfo *ClientInfo, char *handle) {
388 char *tmp1,*tmp2,*tmp3,*ret; 367 char *tmp1,*tmp2,*tmp3,*ret;
389 struct _Post *pl=ClientInfo->PostList; 368 struct _Post *pl=ClientInfo->PostList;
390 char *defret=""; 369 char *defret="";
@@ -408,7 +387,6 @@ char *__ILWS_Post(char *handle) {
408 /* Allocate the list */ 387 /* Allocate the list */
409 if(ClientInfo->PostList==NULL) { 388 if(ClientInfo->PostList==NULL) {
410 if(!(ClientInfo->PostList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Post)))) { 389 if(!(ClientInfo->PostList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Post)))) {
411 LWSERR(LE_MEMORY);
412 if(rw) return 0; 390 if(rw) return 0;
413 return defret; 391 return defret;
414 }; 392 };
@@ -491,13 +469,11 @@ char *__ILWS_Post(char *handle) {
491 469
492 pl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Post)); 470 pl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Post));
493 if(pl->next==NULL) { 471 if(pl->next==NULL) {
494 LWSERR(LE_MEMORY);
495 if(rw) return 0; 472 if(rw) return 0;
496 return defret; 473 return defret;
497 }; 474 };
498 pl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1); 475 pl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1);
499 if(pl->next->id==NULL) { 476 if(pl->next->id==NULL) {
500 LWSERR(LE_MEMORY);
501 if(rw) return 0; 477 if(rw) return 0;
502 return defret; 478 return defret;
503 }; 479 };
@@ -526,7 +502,6 @@ char *__ILWS_Post(char *handle) {
526 502
527 pl->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1); 503 pl->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1);
528 if(pl->next->data==NULL) { 504 if(pl->next->data==NULL) {
529 LWSERR(LE_MEMORY);
530 return defret; 505 return defret;
531 }; 506 };
532 j=0; 507 j=0;
@@ -539,7 +514,6 @@ char *__ILWS_Post(char *handle) {
539 514
540 tmp1=__ILWS_malloc(3); 515 tmp1=__ILWS_malloc(3);
541 if(tmp1==NULL) { 516 if(tmp1==NULL) {
542 LWSERR(LE_MEMORY);
543 if(rw) return 0; 517 if(rw) return 0;
544 return defret; 518 return defret;
545 }; 519 };
@@ -566,13 +540,10 @@ char *__ILWS_Post(char *handle) {
566 return ret; 540 return ret;
567} 541}
568 542
569
570
571/*********************************************************************************************************/
572/* 543/*
573 * Function for MultiPart formdata 544 * Function for MultiPart formdata
574 */ 545 */
575struct _MultiPart __ILWS_MultiPart(char *handle) { 546struct _MultiPart __ILWS_MultiPart(struct ClientInfo *ClientInfo, char *handle) {
576 char *tmp1,*tmp2,*tmp3; 547 char *tmp1,*tmp2,*tmp3;
577 int i; 548 int i;
578 char *name; 549 char *name;
@@ -588,7 +559,6 @@ struct _MultiPart __ILWS_MultiPart(char *handle) {
588 if(ClientInfo->MultiPartList==NULL) { 559 if(ClientInfo->MultiPartList==NULL) {
589 ClientInfo->MultiPartList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _MultiPart)); 560 ClientInfo->MultiPartList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _MultiPart));
590 if(ClientInfo->MultiPartList==NULL) { 561 if(ClientInfo->MultiPartList==NULL) {
591 LWSERR(LE_MEMORY);
592 return defret; 562 return defret;
593 }; 563 };
594 ClientInfo->MultiPartList->next=NULL; 564 ClientInfo->MultiPartList->next=NULL;
@@ -613,12 +583,10 @@ struct _MultiPart __ILWS_MultiPart(char *handle) {
613 strsize=strlen(handle); 583 strsize=strlen(handle);
614 ml->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _MultiPart)); 584 ml->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _MultiPart));
615 if(ml->next==NULL) { 585 if(ml->next==NULL) {
616 LWSERR(LE_MEMORY);
617 return defret; 586 return defret;
618 }; 587 };
619 ml->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1); 588 ml->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1);
620 if(ml->next->id==NULL) { 589 if(ml->next->id==NULL) {
621 LWSERR(LE_MEMORY);
622 return defret; 590 return defret;
623 }; 591 };
624 memcpy(ml->next->id,handle,strsize); 592 memcpy(ml->next->id,handle,strsize);
@@ -637,7 +605,6 @@ struct _MultiPart __ILWS_MultiPart(char *handle) {
637 boundarysize=tmp2-tmp1; 605 boundarysize=tmp2-tmp1;
638 boundary=__ILWS_add_buffer(ClientInfo->mem,boundarysize+3); 606 boundary=__ILWS_add_buffer(ClientInfo->mem,boundarysize+3);
639 if(boundary==NULL) { 607 if(boundary==NULL) {
640 LWSERR(LE_MEMORY);
641 return defret; 608 return defret;
642 }; 609 };
643 memcpy(boundary,tmp1,boundarysize); 610 memcpy(boundary,tmp1,boundarysize);
@@ -648,7 +615,6 @@ struct _MultiPart __ILWS_MultiPart(char *handle) {
648 namesize=boundarysize+41+strlen(handle); 615 namesize=boundarysize+41+strlen(handle);
649 name=__ILWS_add_buffer(ClientInfo->mem,namesize+1); 616 name=__ILWS_add_buffer(ClientInfo->mem,namesize+1);
650 if(name==NULL) { 617 if(name==NULL) {
651 LWSERR(LE_MEMORY);
652 return defret; 618 return defret;
653 }; 619 };
654 snprintf(name,namesize,"%s\r\nContent-Disposition: form-data; name=",boundary); 620 snprintf(name,namesize,"%s\r\nContent-Disposition: form-data; name=",boundary);
@@ -681,7 +647,6 @@ struct _MultiPart __ILWS_MultiPart(char *handle) {
681 tmp3=strstr(tmp2,"\r\n"); 647 tmp3=strstr(tmp2,"\r\n");
682 ml->next->filename=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1); 648 ml->next->filename=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1);
683 if(ml->next->filename==NULL) { 649 if(ml->next->filename==NULL) {
684 LWSERR(LE_MEMORY);
685 return defret; 650 return defret;
686 }; 651 };
687 memcpy(ml->next->filename,tmp2,tmp3-tmp2); 652 memcpy(ml->next->filename,tmp2,tmp3-tmp2);
@@ -704,7 +669,6 @@ struct _MultiPart __ILWS_MultiPart(char *handle) {
704 669
705 // copy data to node 670 // copy data to node
706 if(!(ml->next->data=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1))) { 671 if(!(ml->next->data=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1))) {
707 LWSERR(LE_MEMORY);
708 return defret; 672 return defret;
709 }; 673 };
710 memcpy(ml->next->data,tmp2,tmp3-tmp2); 674 memcpy(ml->next->data,tmp2,tmp3-tmp2);
@@ -718,11 +682,10 @@ struct _MultiPart __ILWS_MultiPart(char *handle) {
718 682
719}; 683};
720 684
721/*********************************************************************************************************/
722/* 685/*
723 * Function for CookieData 686 * Function for CookieData
724 */ 687 */
725char *__ILWS_Cookie(char *handle) { 688char *__ILWS_Cookie(struct ClientInfo *ClientInfo, char *handle) {
726 char *defret=""; 689 char *defret="";
727 char *tmp1,*tmp2,*ret; 690 char *tmp1,*tmp2,*ret;
728 int size; 691 int size;
@@ -743,7 +706,6 @@ char *__ILWS_Cookie(char *handle) {
743 706
744 ClientInfo->CookieList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Cookie)); 707 ClientInfo->CookieList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Cookie));
745 if(ClientInfo->CookieList==NULL) { 708 if(ClientInfo->CookieList==NULL) {
746 LWSERR(LE_MEMORY);
747 return defret; 709 return defret;
748 }; 710 };
749 ClientInfo->CookieList->next=NULL; 711 ClientInfo->CookieList->next=NULL;
@@ -764,11 +726,9 @@ char *__ILWS_Cookie(char *handle) {
764 726
765 strsize=strlen(handle); 727 strsize=strlen(handle);
766 if(!(cl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Cookie)))) { 728 if(!(cl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Cookie)))) {
767 LWSERR(LE_MEMORY);
768 return defret; 729 return defret;
769 }; 730 };
770 if(!(cl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) { 731 if(!(cl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) {
771 LWSERR(LE_MEMORY);
772 return defret; 732 return defret;
773 }; 733 };
774 memcpy(cl->next->id,handle,strsize); 734 memcpy(cl->next->id,handle,strsize);
@@ -801,7 +761,6 @@ char *__ILWS_Cookie(char *handle) {
801 761
802 ret=__ILWS_add_buffer(ClientInfo->mem,size+1); 762 ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
803 if(ret==NULL) { 763 if(ret==NULL) {
804 LWSERR(LE_MEMORY);
805 return defret; 764 return defret;
806 }; 765 };
807 766
@@ -811,13 +770,10 @@ char *__ILWS_Cookie(char *handle) {
811 return cl->next->data; 770 return cl->next->data;
812}; 771};
813 772
814
815
816/*********************************************************************************************************/
817/* 773/*
818 * get whole query string 774 * get whole query string
819 */ 775 */
820char *__ILWS_clientinfo_getquerystring() { 776char *__ILWS_clientinfo_getquerystring(struct ClientInfo *ClientInfo) {
821 char *tmp1,*tmp2,*ret; 777 char *tmp1,*tmp2,*ret;
822 char *defret=""; 778 char *defret="";
823 size_t size; 779 size_t size;
@@ -830,7 +786,6 @@ char *__ILWS_clientinfo_getquerystring() {
830 size=(tmp2-tmp1)-1; 786 size=(tmp2-tmp1)-1;
831 ret=__ILWS_add_buffer(ClientInfo->mem,size+1); 787 ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
832 if(ret==NULL) { 788 if(ret==NULL) {
833 LWSERR(LE_MEMORY);
834 return defret; 789 return defret;
835 }; 790 };
836 memcpy(ret,tmp1,size); 791 memcpy(ret,tmp1,size);
@@ -838,12 +793,10 @@ char *__ILWS_clientinfo_getquerystring() {
838 return ret; 793 return ret;
839}; 794};
840 795
841
842/*********************************************************************************************************/
843/* 796/*
844 * get whole post data 797 * get whole post data
845 */ 798 */
846char *__ILWS_clientinfo_getpostdata() { 799char *__ILWS_clientinfo_getpostdata(struct ClientInfo *ClientInfo) {
847 char *tmp1,*ret; 800 char *tmp1,*ret;
848 char *defret=""; 801 char *defret="";
849 size_t size; 802 size_t size;
@@ -855,7 +808,6 @@ char *__ILWS_clientinfo_getpostdata() {
855 size=(current_web_client->rbuf+current_web_client->rbufsize)-tmp1; 808 size=(current_web_client->rbuf+current_web_client->rbufsize)-tmp1;
856 ret=__ILWS_add_buffer(ClientInfo->mem,size+1); 809 ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
857 if(ret==NULL) { 810 if(ret==NULL) {
858 LWSERR(LE_MEMORY);
859 return defret; 811 return defret;
860 }; 812 };
861 memcpy(ret,tmp1,size); 813 memcpy(ret,tmp1,size);
@@ -863,126 +815,10 @@ char *__ILWS_clientinfo_getpostdata() {
863 return ret; 815 return ret;
864} 816}
865 817
866
867/*********************************************************************************************************/
868/*
869 * Get authorization username
870 */
871char *__ILWS_clientinfo_getauthuser() {
872 char *tmp1,*tmp2,*ret, *out=NULL;
873 char *defret="";
874 size_t size;
875
876 tmp1=strstr(current_web_client->rbuf,"Authorization: Basic");
877 if(tmp1==NULL) {
878
879 return defret;
880 };
881
882 tmp1+=21;
883 tmp2=strstr(tmp1,"\r\n");
884 if(tmp2==NULL) return defret;
885 size=(int)(tmp2-tmp1);
886
887 ret=__ILWS_malloc(size+1);
888 if(ret==NULL) {
889 LWSERR(LE_MEMORY);
890 return defret;
891 };
892 memcpy(ret,tmp1,size);
893 ret[size]=0;
894
895 out=__ILWS_malloc(size+1);
896 if(out==NULL) {
897 LWSERR(LE_MEMORY);
898 __ILWS_free(ret);
899 return defret;
900 };
901
902 size=__ILWS_base64decode(out,ret);
903 out[size]='\0';
904
905
906 __ILWS_free(ret);
907 tmp2=strstr(out,":");
908 if(tmp2==NULL) return defret;
909
910 ret=__ILWS_add_buffer(ClientInfo->mem,(tmp2-out)+1);
911 if(ret==NULL) {
912 LWSERR(LE_MEMORY);
913 __ILWS_free(out);
914 return defret;
915 };
916 memcpy(ret,out,tmp2-out);
917 ret[tmp2-out]=0;
918
919 __ILWS_free(out);
920 return ret;
921}
922
923
924/*********************************************************************************************************/
925/*
926 * get authorization password
927 */
928char *__ILWS_clientinfo_getauthpass() {
929 char *tmp1,*tmp2,*ret, *out=NULL;
930 char *defret="";
931 size_t size;
932
933 tmp1=strstr(current_web_client->rbuf,"Authorization: Basic");
934 if(tmp1==NULL) {
935
936 return defret;
937 };
938
939 tmp1+=21;
940 tmp2=strstr(tmp1,"\r\n");
941 if(tmp2==NULL) return defret;
942 size=(int)(tmp2-tmp1);
943
944 ret=__ILWS_malloc(size+1);
945 if(ret==NULL) {
946 LWSERR(LE_MEMORY);
947 return defret;
948 };
949 memcpy(ret,tmp1,size);
950 ret[size]=0;
951
952 out=__ILWS_malloc(size+1);
953 if(out==NULL) {
954 LWSERR(LE_MEMORY);
955 __ILWS_free(ret);
956 return defret;
957 };
958
959 size=__ILWS_base64decode(out,ret);
960 out[size]='\0';
961
962
963 __ILWS_free(ret);
964 tmp1=strstr(out,":")+1;
965 tmp2=out+strlen(out);
966
967 ret=__ILWS_add_buffer(ClientInfo->mem,(tmp2-tmp1)+1);
968 if(ret==NULL) {
969 LWSERR(LE_MEMORY);
970 __ILWS_free(out);
971 return defret;
972 };
973 memcpy(ret,tmp1,tmp2-tmp1);
974 ret[tmp2-tmp1]=0;
975
976 __ILWS_free(out);
977 return ret;
978}
979
980
981/*********************************************************************************************************/
982/* 818/*
983 * get method (GET POST HEAD etc) 819 * get method (GET POST HEAD etc)
984 */ 820 */
985char *__ILWS_clientinfo_getmethod() { 821char *__ILWS_clientinfo_getmethod(struct ClientInfo *ClientInfo) {
986 char *tmp1,*ret; 822 char *tmp1,*ret;
987 char *defret=""; 823 char *defret="";
988 size_t size; 824 size_t size;
@@ -993,7 +829,6 @@ char *__ILWS_clientinfo_getmethod() {
993 size=tmp1-current_web_client->rbuf; 829 size=tmp1-current_web_client->rbuf;
994 ret=__ILWS_add_buffer(ClientInfo->mem,size+1); 830 ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
995 if(ret==NULL) { 831 if(ret==NULL) {
996 LWSERR(LE_MEMORY);
997 return defret; 832 return defret;
998 }; 833 };
999 memcpy(ret,current_web_client->rbuf,size); 834 memcpy(ret,current_web_client->rbuf,size);
@@ -1001,12 +836,10 @@ char *__ILWS_clientinfo_getmethod() {
1001 return ret; 836 return ret;
1002} 837}
1003 838
1004
1005/*********************************************************************************************************/
1006/* 839/*
1007 * get request name (GET /taltal HTTP/1.0) returning /taltal 840 * get request name (GET /taltal HTTP/1.0) returning /taltal
1008 */ 841 */
1009char *__ILWS_clientinfo_getreqname() { 842char *__ILWS_clientinfo_getreqname(struct ClientInfo *ClientInfo) {
1010 char *ret; 843 char *ret;
1011 char *tmp1=strstr(current_web_client->rbuf,"/"); // Must have / 844 char *tmp1=strstr(current_web_client->rbuf,"/"); // Must have /
1012 char *tmp2=strstr(tmp1,"?"); 845 char *tmp2=strstr(tmp1,"?");
@@ -1025,7 +858,6 @@ char *__ILWS_clientinfo_getreqname() {
1025 return defret; 858 return defret;
1026 ret=__ILWS_add_buffer(ClientInfo->mem,size+1); 859 ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
1027 if(ret==NULL) { 860 if(ret==NULL) {
1028 LWSERR(LE_MEMORY);
1029 return defret; 861 return defret;
1030 }; 862 };
1031 j=0; 863 j=0;
@@ -1038,7 +870,6 @@ char *__ILWS_clientinfo_getreqname() {
1038 870
1039 tmp2=__ILWS_malloc(3); 871 tmp2=__ILWS_malloc(3);
1040 if(tmp2==NULL) { 872 if(tmp2==NULL) {
1041 LWSERR(LE_MEMORY);
1042 return defret; 873 return defret;
1043 }; 874 };
1044 strncpy(tmp2,&tmp1[j+1],2); 875 strncpy(tmp2,&tmp1[j+1],2);
@@ -1058,67 +889,5 @@ char *__ILWS_clientinfo_getreqname() {
1058 ret[size]=0; 889 ret[size]=0;
1059 return ret; 890 return ret;
1060} 891}
1061/*********************************************************************************************************/ 892
1062/* 893
1063 * Get config entry (new on 0.5.0)
1064 */
1065char *__ILWS_Conf(const char *topic,const char *key) {
1066 struct web_server *server=current_web_server;
1067 FILE *tmpf;
1068 struct stat statf; // tested only on WIN
1069 char *defret="";
1070 char *dataconf;
1071 char *tmp1,*tmp2,*tmp3;
1072 long tmpsize=0;
1073 int sizec;
1074 // Config revive tested only on WIN
1075 if(server->conffile!=NULL) {
1076 stat(server->conffile,&statf);
1077 if(statf.st_mtime>server->conffiletime) {
1078 tmpf=fopen(server->conffile,"r");
1079 if(tmpf!=NULL) {
1080 free(server->dataconf);
1081 fseek(tmpf,SEEK_SET,SEEK_END);
1082 sizec=ftell(tmpf);
1083 fseek(tmpf,0,SEEK_SET);
1084 server->dataconf=malloc(sizec+1);
1085 fread(server->dataconf,sizec,1,tmpf);
1086 server->dataconf[sizec-9]=0; // 9 is temporary
1087 server->conffiletime=statf.st_mtime;
1088 fclose(tmpf);
1089 };
1090 };
1091 };
1092
1093 dataconf=__ILWS_stristr(server->dataconf,topic);
1094 if(dataconf==NULL) {
1095 return defret;
1096 };
1097 dataconf+=strlen(topic);
1098
1099 do {
1100 tmp1=__ILWS_stristr(dataconf,key);
1101 dataconf+=1;
1102 if(dataconf[0]==0) {
1103 return defret;
1104 };
1105 if(dataconf[0]=='[' && dataconf[-1]=='\n') {
1106 return defret;
1107 };
1108 }while(!(tmp1!=NULL && tmp1[-1]=='\n' && tmp1[strlen(key)]=='='));
1109
1110
1111 tmp1+=strlen(key)+1;
1112 tmp2=__ILWS_stristr(tmp1,"\n");
1113 if(tmp2==NULL) {
1114 tmp2=tmp1+strlen(tmp1);
1115 };
1116 tmpsize=tmp2-tmp1;
1117 tmp3=__ILWS_add_buffer(ClientInfo->mem,tmpsize+1);
1118 memcpy(tmp3,tmp1,tmpsize);
1119 tmp3[tmpsize]=0;
1120 return tmp3;
1121
1122
1123
1124};