Fixed bug.(GET request detection)
[chise/kage.git] / kagecgi / kagedb.c
1 //kagedb.c\r
2 //\r
3 \r
4 #include "kage.h"\r
5 #include "kagecgi.h"\r
6 #include "sysdep.h"\r
7 \r
8 int initDB(){\r
9         db_create(&kDatabase, NULL, 0);
10         kDatabase->open(kDatabase, databaseFileName, NULL, DB_HASH, DB_RDONLY, 0644);\r
11         return 0;\r
12 }\r
13 \r
14 int closeDB(){\r
15         kDatabase->close(kDatabase, 0);\r
16         return 0;\r
17 }\r
18 \r
19 void searchPartsData(const GString *in, GString *out){\r
20         DBT dbkey, dbdata;\r
21         char *start, *end, *buf;\r
22         GString *temp, *temp2;\r
23         \r
24         //cut off the end '-0000' if 'in' end with it\r
25         temp = g_string_new(in->str);\r
26 //      if(strncmp(temp->str + temp->len - 5, "-0000", 5) == 0) g_string_set_size(temp, temp->len - 5);\r
27         if((temp->str)[0] == 'u'){\r
28                 if(strncmp(temp->str + temp->len - 4, "-j00", 4) == 0) g_string_set_size(temp, temp->len - 4);\r
29                 else if(strncmp(temp->str + temp->len - 4, "-g00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
30                 else if(strncmp(temp->str + temp->len - 4, "-t00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
31                 else if(strncmp(temp->str + temp->len - 4, "-k00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
32                 else if(strncmp(temp->str + temp->len - 4, "-v00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
33                 else if(strncmp(temp->str + temp->len - 4, "-u00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
34         }\r
35         \r
36         memset(&dbkey,0,sizeof(DBT));\r
37         memset(&dbdata,0,sizeof(DBT));\r
38         dbkey.data = temp->str;\r
39         dbkey.size = temp->len;\r
40         g_string_set_size(out, 0);\r
41         temp2 = g_string_new("");\r
42         kDatabase->get(kDatabase, NULL, &dbkey, &dbdata, 0);\r
43         if(dbdata.size != 0){\r
44                 buf = (char *)malloc(dbdata.size + 1);
45                 strncpy(buf, dbdata.data, dbdata.size + 1); 
46                 //first:search selected shotai\r
47                 if(kShotai == kMincho) start = strstr(buf, ",mincho,");\r
48                 else start = strstr(buf, ",gothic,");\r
49                 if(start != NULL){\r
50                         start = strchr((start+8), ',');\r
51                         if(start != NULL){\r
52                                 start = strchr((start+1), ',');\r
53                                 if(start != NULL){\r
54                                         end = strchr((start+1), ',');\r
55                                         if(end != NULL){\r
56                                                 g_string_append_len(temp2, (start+1), end - start - 2 + 1);\r
57                                                 convert99(temp2, out);\r
58                                                 return;\r
59                                         }\r
60                                 }\r
61                         }\r
62                 }\r
63                 //second:search another shotai\r
64                 if(kShotai == kMincho) start = strstr(buf, ",gothic,");\r
65                 else start = strstr(buf, ",mincho,");\r
66                 if(start != NULL){\r
67                         start = strchr((start+8), ',');\r
68                         if(start != NULL){\r
69                                 start = strchr((start+1), ',');\r
70                                 if(start != NULL){\r
71                                         end = strchr((start+1), ',');\r
72                                         if(end != NULL){\r
73                                                 g_string_append_len(temp2, (start+1), end - start - 2 + 1);\r
74                                                 convert99(temp2, out);\r
75                                                 return;\r
76                                         }\r
77                                 }\r
78                         }\r
79                 }\r
80                 free(buf);
81         }\r
82 }\r
83 \r
84 void searchAliasData(const GString *in, GString *out){\r
85         DBT dbkey, dbdata;\r
86         char *start, *end, *buf;\r
87         GString *temp;\r
88         \r
89         //cut off the end '-0000' if 'in' end with it\r
90         temp = g_string_new(in->str);\r
91 //      if(strncmp(temp->str + temp->len - 5, "-0000", 5) == 0) g_string_set_size(temp, temp->len - 5);\r
92         if((temp->str)[0] == 'u'){\r
93                 if(strncmp(temp->str + temp->len - 4, "-j00", 4) == 0) g_string_set_size(temp, temp->len - 4);\r
94                 else if(strncmp(temp->str + temp->len - 4, "-g00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
95                 else if(strncmp(temp->str + temp->len - 4, "-t00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
96                 else if(strncmp(temp->str + temp->len - 4, "-k00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
97                 else if(strncmp(temp->str + temp->len - 4, "-v00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
98                 else if(strncmp(temp->str + temp->len - 4, "-u00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
99         }\r
100         \r
101         memset(&dbkey,0,sizeof(DBT));\r
102         memset(&dbdata,0,sizeof(DBT));\r
103         dbkey.data = temp->str;\r
104         dbkey.size = temp->len;\r
105         g_string_set_size(out, 0);\r
106         kDatabase->get(kDatabase, NULL, &dbkey, &dbdata, 0);\r
107         if(dbdata.size != 0){\r
108                 buf = (char *)malloc(dbdata.size + 1);
109                 strncpy(buf, dbdata.data, dbdata.size + 1); 
110                 start = strstr(buf, ",linkto,");\r
111                 if(start != NULL){\r
112                         start = strchr((start+8), ',');\r
113                         if(start != NULL){\r
114                                 start = strchr((start+1), ',');\r
115                                 if(start != NULL){\r
116                                         end = strchr((start+1), ',');\r
117                                         if(end != NULL){\r
118                                                 g_string_append_len(out, (start+1), end - start - 2 + 1);\r
119                                         }\r
120                                 }\r
121                         }\r
122                 }\r
123                 free(buf);
124         }\r
125 }\r
126 \r