⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcgi.c

📁 C/C++语言的CGI接口库
💻 C
📖 第 1 页 / 共 3 页
字号:
    parseToken(cookie, name, &encoded);    tokenizeURLString(encoded, strlen(encoded), &tokens);    gcgiDecodeBaseSixtyFourString(tokens[0], &ciphertext, &ctlen);    decryptString(ciphertext, ctlen, key, &decoded, &size);    gcgiDecodeBaseSixtyFourString(tokens[1], &cdigest, &cdlen);    generateStringHMAC(ciphertext, ctlen, &digest, &dlen);    if (dlen != cdlen && strncmp(digest, cdigest, dlen) != 0)	return GCGIBADDATA;    size++;    decoded = XREALLOC(char, decoded, size);    decoded[size-1] = '\0';    *value = decoded;    freeStringArray(tokens);    XFREE(encoded);    XFREE(ciphertext);    XFREE(digest);    XFREE(cdigest);    return GCGISUCCESS;}gcgiReturnType  gcgiGenerateKey(unsigned char **key){    *key = generateKey();    return GCGISUCCESS;}gcgiReturnType  gcgiWriteKeyToFile(unsigned char *key, char *path){    if (writeKeyToFile(key, path) < 0)	return GCGIFATALERROR;    return GCGISUCCESS;}gcgiReturnType  gcgiReadKeyFromFile(char *path, unsigned char **key){    if (readKeyFromFile(path, key) < 0)	return GCGIFATALERROR;    return GCGISUCCESS;}#endifgcgiReturnTypegcgiNumFormFields(int *ret){    *ret = cgiQuery->queryCount;    return GCGISUCCESS;}gcgiReturnTypegcgiNumFields(char *field, int *ret){    int i;        if (findQueryStringColl(field, &i) == GCGIFIELDNOTFOUND) {	*ret = 0;	return GCGIFIELDNOTFOUND;    }    *ret = cgiQuery->query[i]->num;        return GCGISUCCESS;}gcgiReturnType gcgiFetchInteger(char *field, int *ret, int defaultRet){    int i;    QueryStringNode *qs;    if (findQueryStringNodeFirst(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = defaultRet;	return GCGIFIELDNOTFOUND;    }    if (qs->size <= 1 && qs->data[0] == '\0') {	*ret = defaultRet;	return GCGIFIELDEMPTY;    }    i = strtol(qs->data,NULL,10);    if (errno == ERANGE) {	*ret = defaultRet;	return GCGIBADDATA;    }    else	*ret = i;    return GCGISUCCESS;}gcgiReturnType gcgiFetchIntegerNext(char *field, int *ret, int defaultRet){    int i;    QueryStringNode *qs;    if (findQueryStringNode(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = defaultRet;	return GCGIFIELDNOTFOUND;    }    if (qs->size <= 1 && qs->data[0] == '\0') {	*ret = defaultRet;	return GCGIFIELDEMPTY;    }    i = strtol(qs->data,NULL,10);    if (errno == ERANGE) {	*ret = defaultRet;	return GCGIBADDATA;    }    else	*ret = i;    return GCGISUCCESS;}gcgiReturnType gcgiFetchDouble(char *field, double *ret, double defaultRet){    double i;    QueryStringNode *qs;    if (findQueryStringNodeFirst(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = defaultRet;	return GCGIFIELDNOTFOUND;    }    if (qs->size <= 1 && qs->data[0] == '\0') {	*ret = defaultRet;	return GCGIFIELDEMPTY;    }    i = strtod(qs->data, NULL);    if (errno == ERANGE) {	*ret = defaultRet;	return GCGIBADDATA;    }    else	*ret = i;    return GCGISUCCESS;}gcgiReturnType gcgiFetchDoubleNext(char *field, double *ret, double defaultRet){    double i;    QueryStringNode *qs;    if (findQueryStringNode(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = defaultRet;	return GCGIFIELDNOTFOUND;    }    if (qs->size <= 1 && qs->data[0] == '\0') {	*ret = defaultRet;	return GCGIFIELDEMPTY;    }    i = strtod(qs->data, NULL);    if (errno == ERANGE) {	*ret = defaultRet;	return GCGIBADDATA;    }    else	*ret = i;    return GCGISUCCESS;}gcgiReturnType gcgiFieldLength(char *field, int *ret){    QueryStringNode *qs;        if (findQueryStringNodeFirst(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = 0;	return GCGIFIELDNOTFOUND;    }    *ret = strlen(qs->data);        if (*ret == 0)	return GCGIFIELDEMPTY;    else	return GCGISUCCESS;}gcgiReturnType gcgiFieldLengthCur(char *field, int *ret){    QueryStringNode *qs;        if (findQueryStringNodeCur(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = 0;	return GCGIFIELDNOTFOUND;    }    *ret = strlen(qs->data);    if (*ret == 0)	return GCGIFIELDEMPTY;    else	return GCGISUCCESS;}gcgiReturnType gcgiFieldLengthNext(char *field, int *ret){    QueryStringNode *qs;        if (findQueryStringNode(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = 0;	return GCGIFIELDNOTFOUND;    }    *ret = strlen(qs->data);    if (*ret == 0)	return GCGIFIELDEMPTY;    else	return GCGISUCCESS;}gcgiReturnType gcgiFieldSize(char *field, int *ret){    QueryStringNode *qs;        if (findQueryStringNodeFirst(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = 0;	return GCGIFIELDNOTFOUND;    }    *ret = qs->size;        return GCGISUCCESS;}gcgiReturnType gcgiFieldSizeCur(char *field, int *ret){    QueryStringNode *qs;        if (findQueryStringNodeCur(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = 0;	return GCGIFIELDNOTFOUND;    }    *ret = qs->size;        return GCGISUCCESS;}gcgiReturnType gcgiFieldSizeNext(char *field, int *ret){    QueryStringNode *qs;        if (findQueryStringNode(field, &qs) == GCGIFIELDNOTFOUND) {	*ret = 0;	return GCGIFIELDNOTFOUND;    }    *ret = qs->size;        return GCGISUCCESS;}char *gcgiFetchEnvVar(int env){    return cgiQuery->env[env];}gcgiReturnType gcgiFetchString(char *field, char *ret, int max){    int i;    QueryStringNode *qs;    if (findQueryStringNodeFirst(field, &qs) == GCGIFIELDNOTFOUND) {	ret[0] = '\0';	return GCGIFIELDNOTFOUND;    }        i = strlen(qs->data);    if (i >= max) 	i = max-1;        strncpy(ret, qs->data, i);    ret[i] = '\0';    if (i == 0)	return GCGIFIELDEMPTY;    else	return GCGISUCCESS;}gcgiReturnType gcgiFetchStringNext(char *field, char *ret, int max){    int i;    QueryStringNode *qs;    if (findQueryStringNode(field, &qs) == GCGIFIELDNOTFOUND) {	ret[0] = '\0';	return GCGIFIELDNOTFOUND;    }      i = strlen(qs->data);    if (i >= max) 	i = max-1;        strncpy(ret, qs->data, i);    ret[i] = '\0';    if (i == 0)	return GCGIFIELDEMPTY;    else	return GCGISUCCESS;}gcgiReturnType  gcgiFetchStringNoNewLines(char *field, char *ret, int max){    int len,i,j;    QueryStringNode *qs;    if (findQueryStringNodeFirst(field, &qs) == GCGIFIELDNOTFOUND) {	ret[0] = '\0';	return GCGIFIELDNOTFOUND;    }      len = strlen(qs->data);    if (len >= max) 	len = max-1;    for (j = 0, i = 0; i <= len && qs->data[j] != '\0'; j++, i++) 	if (qs->data[j] == '\r' && qs->data[j+1] == '\n') {	    ret[i] = ' ';	    j++;	}	else if (qs->data[j] == '\n') {	    ret[i] = ' ';	}	else	    ret[i] = qs->data[j];        if (i <= len)	ret[i] = '\0';    else	ret[len] = '\0';        if (len == 0)	return GCGIFIELDEMPTY;    else	return GCGISUCCESS;}gcgiReturnType  gcgiFetchStringNoNewLinesNext(char *field, char *ret, int max){    int len,i,j;    QueryStringNode *qs;    if (findQueryStringNode(field, &qs) == GCGIFIELDNOTFOUND) {	ret[0] = '\0';	return GCGIFIELDNOTFOUND;    }      len = strlen(qs->data);    if (len >= max) 	len = max-1;    for (j = 0, i = 0; i <= len && qs->data[j] != '\0'; j++, i++) 	if (qs->data[j] == '\r' && qs->data[j+1] == '\n') {	    ret[i] = ' ';	    i++;	    j += 2;	}	else if (qs->data[j] == '\n') {	    ret[i] = ' ';	    j++;	}	else	    ret[i] = qs->data[j];        if (i <= len)	ret[i] = '\0';    else	ret[len] = '\0';        if (i == 0)	return GCGIFIELDEMPTY;    else	return GCGISUCCESS;}gcgiReturnTypegcgiFetchData(char *field, char *ret, int max, MimeType *type, 	      char **subtype, MimeEncoding *encoding, char **filename, int *truncated){    size_t i;    QueryStringNode *qs;    if (findQueryStringNodeFirst(field, &qs) == GCGIFIELDNOTFOUND) 	return GCGIFIELDNOTFOUND;      if (qs->truncated)	*truncated = 1;    else	*truncated = 0;    i = qs->size;    if (i >= max) 	i = max;        if (i == 0)	return GCGIFIELDNOTFOUND;    memcpy(ret, qs->data, i);    *type     = qs->type;    *encoding = qs->encoding;    if (subtype != NULL) {	*subtype = XMALLOC(char, strlen(qs->subtype)+1);	strcpy(*subtype, qs->subtype);    }    if (filename != NULL) {	*filename = XMALLOC(char, strlen(qs->filename)+1);	strcpy(*filename, qs->filename);    }    return GCGISUCCESS;}gcgiReturnTypegcgiFetchDataNext(char *field, char *ret, int max, MimeType *type, 		  char **subtype, MimeEncoding *encoding, char **filename, int *truncated){    size_t i;    QueryStringNode *qs;    if (findQueryStringNode(field, &qs) == GCGIFIELDNOTFOUND)	return GCGIFIELDNOTFOUND;      i = qs->size;    if (i >= max) 	i = max;        if (i == 0)	return GCGIFIELDNOTFOUND;    memcpy(ret, qs->data, i);    *type     = qs->type;    *encoding = qs->encoding;    return GCGISUCCESS;}gcgiReturnType gcgiFetchMultipleString(char *field, char ***data){    int i, j;    QueryStringNode *qs;    QueryStringColl *qsc;    if (findQueryStringColl(field, &i) == GCGIFIELDNOTFOUND) {	*data = NULL;	return GCGIFIELDNOTFOUND;    }        qsc = cgiQuery->query[i];    /* Malloc the array of char pointers. */    *data = XMALLOC(char *, qsc->num + 1);    (*data)[qsc->num] = '\0';    for (qs = qsc->beg, j = 0; qs != NULL; qs = qs->next, j++) {	(*data)[j] = XMALLOC(char, qs->size);	strncpy((*data)[j], qs->data, qs->size - 1);	(*data)[j][qs->size - 1] = '\0';    }    return GCGISUCCESS;}gcgiReturnTypegcgiFreeMultipleString(char **data){    int i;     if (data == NULL)	return GCGISUCCESS;    for (i = 0; data[i] != NULL; i++)	XFREE(data[i]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -