Die Funktion kcHttpPercentDecode
wandelt Zeichen in Prozent-Darstellung, die in der übergebenen Zeichenfolgen enthalten sind, in ihre normale Ein-Zeichen-Darstellung um.
In der URL eines HTTP-Requests können einzelne Zeichen in ihrer %-Darstellung enthalten sein. Dieser Mechanismus ist in RFC 3986 "Uniform Resource Identifier" näher beschrieben. Dabei werden bestimmte US-ASCII Zeichen in ihrer Sedezimal-Darstellung wiedergegeben. Eine solche Prozent-Darstellung wird durch ein vorangestelltes Prozentzeichen ("%") gekennzeichnet; z.B. kann ein Leerzeichen als %20 dargestellt werden oder das Zeichen Tilde ("~") durch die Zeichenfolge %7E.
Die Funktion kcHttpPercentDecode
kann insbesondere zur Normalisierung der Query eines HTTP-Requests sinnvoll eingesetzt werden.
typedef enum { KC_HTTP_NORM_MINIMUM = 1 , KC_HTTP_NORM_SPACE_ONLY = 2 , KC_HTTP_NORM_UNRESERVED = 4 , KC_HTTP_NORM_RESERVED = 8 , KC_HTTP_NORM_ALL_BUT_PERCENT = 16 , KC_HTTP_NORM_ALL = 32 } kc_http_norm; kc_http_retcode kcHttpPercentDecode( kc_http_norm normFlags, char * bufferUrl, int inputLth, int * outputLth );
Diese Funktion hat folgende Funktionsparameter:
>> | normFlags | Wert aus enum kc_http_norm , mit dem der Umfang der gewünschten Umsetzung festgelegt wird. |
<> | bufferUrl | Adresse des Puffers, in dem die umzusetzende Zeichenfolge übergeben und die umgesetzte Zeichenfolge zurückgegeben wird. Der Puffer muss mindestens inputLth Bytes lang sein. |
>> | inputLth | Länge der umzusetzenden Zeichenfolge. |
<< | outputLth | Adresse einer Variablen, in der die Länge der umgesetzten Zeichenfolge zurückgegeben wird. |
Mit dem Parameter normFlags
wird der Umfang der gewünschten Umsetzungen festgelegt.
kann folgende Werte annehmen:normFlags
KC_HTTP_NORM_MINIMUM
Bei diesem Wert wird nur eine "case normalization" durchgeführt, d.h. die beiden Buchstaben, die einem %-Zeichen folgen, werden in Großbuchstaben umgesetzt.
KC_HTTP_NORM_SPACE_ONLY
Bei diesem Wert werden zusätzlich zu KC_HTTP_NORM_MINIMUM alle "%20" Codierungen durch Leerzeichen ersetzt.
KC_HTTP_NORM_UNRESERVED
Bei diesem Wert werden zusätzlich zu KC_HTTP_NORM_SPACE_ONLY alle Prozent-Darstellungen von Unreserved Characters durch ihre "normale" Ein-Zeichen Darstellung ersetzt. Zur Definition von Unreserved Characters siehe RFC 3986 "Uniform Resource Identifier".
KC_HTTP_NORM_RESERVED
Bei diesem Wert werden zusätzlich zu KC_HTTP_NORM_UNRESERVED alle Prozent-Darstellungen von Reserved Characters durch ihre "normale" Ein-Zeichen Darstellung ersetzt. Bzgl. der Definition von Reserved Characters siehe RFC 3986 "Uniform Resource Identifier".
KC_HTTP_NORM_ALL_BUT_PERCENT
Bei diesem Wert werden zusätzlich zu KC_HTTP_NORM_RESERVED alle Prozent-Darstellungen außer %25 ("%") durch ihre "normale" Ein-Zeichen Darstellung ersetzt.
KC_HTTP_NORM_ALL
Bei diesem Wert werden alle Prozent-Darstellungen durch ihre "normale" Ein-Zeichen Darstellung ersetzt.
Der zurückgelieferte Funktionswert hat folgende Bedeutung:
KC_HTTP_OK
Die Funktion wurde erfolgreich ausgeführt.
KC_HTTP_PARAM_VALUE_NULL
Die Adresse des Puffers bufferUrl
oder die Adresse für die Länge der umgesetzten Zeichenfolge outputLth
ist NULL.
KC_HTTP_INVALID_LENGTH
Die Länge der umzusetzenden Zeichenfolge inputLth
ist negativ oder die umzusetzende Zeichenfolge enthält ein Nullzeichen (\0).
KC_HTTP_NORMALIZATION_ERROR
Im Parameter normFlags
wurde ein ungültiger Wert übergeben oder bei der Normalisierung trat ein Fehler auf.
KC_HTTP_PARAM_INVALID_URLSTRING
Die umzusetzende Zeichenfolge enthält ein Prozentzeichen ("%"), aber eines der nächsten beiden Zeichen ist keine abdruckbare Hexadezimal-Zahl.