Repository navigation
Expand file tree
/
Copy pathquery.c
More file actions
153 lines (144 loc) · 3.24 KB
/
Copy pathquery.c
File metadata and controls
153 lines (144 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
* query.c
*
* Created on: 26 juin 2017
* Author: slat
* Cette unite contient les fonctions de gestion des paramètres envoyé par les pages Web
*/
#include "string.h"
#include "query.h"
#include "stdio.h"
struct st_QueryParam para_query[500];
char Nb_Q;
/**
* @fn char Query_Cut(char * query_from)
* @brief Cette fonction découpe la requete en tableau de pointeur sur les paramètres de la requéte
* @param char * query_from pointeur sur la requete
* @retval Nombre de paramètres trouvé dans la requéte
*/
char Query_Cut(char * query_from, unsigned short length_Buffer)
{
unsigned char Nb_Requette = 0;
unsigned short i = 0;
char * p;
//debug
//FILE *fp_Data = NULL;
//debug
p = query_from;
while (i < length_Buffer)
{
if ((*p) == 0)
{
i = length_Buffer;
break;
}
if (Nb_Requette == 0)
{
// Le premier caractére correspond au premier nom de parametre
para_query[Nb_Requette].Name_Param = p;
Nb_Requette++;
}
else
{
// après le nom de paramètre, on cherche la valeur
if ((*p) == '=')
{
para_query[Nb_Requette - 1].Value_Param = p+1;
*p = 0;
}
if ((*p) == '&')
{
*p = 0;
para_query[Nb_Requette].Name_Param = p+1;
Nb_Requette++;
}
}
p++;
i++; // surveillance de la taille du buffer;
}
Nb_Q = Nb_Requette;
// fp_Data = fopen("/usr/slat_debug/debug_query.txt","w"); // On ouvre le fichier en ecriture
// if (fp_Data != NULL)
// {
// fprintf(fp_Data,"Requette=%s\n",query_from);
// fprintf(fp_Data,"Nombre de parametres=%d\n",Nb_Q);
// i = 0;
// while (i< Nb_Q)
// {
// fprintf(fp_Data,"Parametre %d = %s - Valeur = %s\n",i,para_query[i].Name_Param,para_query[i].Value_Param);
// i++;
// }
// fclose(fp_Data);
// }
return Nb_Requette;
}
/**
* @fn char Value_Query(char * Param_Name, char * Param_Value)
* @brief Retourne dans le pointeur Param_Value la valeur du paramètre indiqué par Param_Name
* @param Param_Name : char * pointeur sur le nom du paramètre à lire
* @retval char : retourne 1 si OK et 0 si pas OK
*/
char Value_Query(char * Param_Name, char * Param_Value)
{
unsigned char err = 0;
unsigned char i = 0;
while (i< Nb_Q)
{
if (strcmp(Param_Name,para_query[i].Name_Param) == 0)
{
// On a trouvé le paramètre, on copie dans Param_Value
strcpy(Param_Value,para_query[i].Value_Param);
err = 1;
}
i++;
}
return err;
}
/**
* @fn unsigned char hex2dec(unsigned char ucHex)
* @brief convertit un caractere hexadécimal en caractère décimal
* @param
* @retval
*/
unsigned char hex2dec(unsigned char ucHex)
{
if (ucHex <= '9')
{
return (ucHex - '0');
}
return ((ucHex & ~0x20) - 'A' +10);
}
/**
* @fn void unescape(char * pFormIn)
* @brief Cette fonction convertie une chaine envoyé par le site en chaine normale
* @param char * pFormIn : pointeur vers la chaine à traduire
* @retval none
*/
void unescape(char * pFormIn)
{
char * pFormOut;
unsigned char ucCharAscii;
if (pFormIn)
{
pFormOut = pFormIn;
do
{
switch (*pFormIn)
{
case '+' :
pFormIn++;
*pFormOut=' ';
break;
case '%' :
pFormIn++;
ucCharAscii = hex2dec(*pFormIn++) << 4;
*pFormOut = ucCharAscii | hex2dec(*pFormIn++);
break;
default:
*pFormOut = *pFormIn++;
break;
}
}
while (*pFormOut++);
}
}