//プロジェクト名cookie002 C++ソースファイルcookie002.cpp #include #include #include extern "C" { __declspec(dllexport) char * recvcookie(char * string01); __declspec(dllexport) void sendcookie(char * string01); int urlencode01(char *s,char *pd); int urldecode01(char *s); char * recvcookie(char * string01) { int TRUE=1; int FALSE=0; char *p,*param; int len,n,done; done = FALSE; p = param = NULL; p = getenv("HTTP_COOKIE"); if(p != NULL) { len = strlen(p); param = (char *)calloc(1,len + 2); if (param != NULL) { param = strcpy(param, p); if(param != NULL) { done = TRUE; } } } if (done) { len=strlen(string01); n=urldecode01(param); if (len>=n) { memcpy(string01,param,n); } else { * string01='\0'; } free(param); } else { * string01='\0'; } return string01; } void sendcookie(char * p) { int TRUE=1; int FALSE=0; char *param,*param1; int len,n,done; done = FALSE; param = NULL; if(p != NULL) { len = strlen(p); param = (char *)calloc(1,len*3 + 2); param1 = (char *)calloc(1,len*3 + 14); if (param != NULL && param1 != NULL) { done = TRUE; } } n=urlencode01(p,param); strcpy(param1,"Set-Cookie: "); strcat(param1,param); puts(param1); } int urlencode01(char *s,char *pd) { int n; n = 0; while(*s) { // if( (*s >= '0' && *s <= '9') // || (*s >= 'A' && *s <= 'Z') // || (*s >= 'a' && *s <= 'z') // || (*s == '-') // || (*s == '.') // || (*s == '_') ) // { // *pd++ = *s++; // n++; // } // else if( *s == ' ' ) // { // *pd++ = '+'; // n++; // s++; // } // if( *s == '%' ) // { // sprintf(pd,"%%%02X",(unsigned char)*s); // pd +=3; // n +=3; // s++; // } // else if((((unsigned char)*s>= 0x81) && ((unsigned char)*s<=0x9F)) || (((unsigned char)*s>=0xE0) && ((unsigned char)*s<=0xEF))) // { // sprintf(pd,"%%%02X",(unsigned char)*s); // pd +=3; // n +=3; // s++; // sprintf(pd,"%%%02X",(unsigned char)*s); // pd +=3; // n +=3; // s++; // } // else { *pd++ = *s++; n++; } } *pd++ = '\0'; n++; *pd++ = '\0'; n++; return n; } int urldecode01(char *s) { char *pd; // int ch,n; int n; pd = s; n = 0; while(*s) { // switch(*s) { // case '&': // *pd++ = '\0'; // n++; // s++; // break; // case '+': // *pd++ = ' '; // n++; // s++; // break; // case '%': // sscanf(s + 1,"%02x",&ch); // *pd++ = (char)ch; // n++; // s += 3; // break; // default: // *pd++ = *s++; // n++; // break; // } *pd++ = *s++; n++; } *pd++ = '\0'; n++; *pd++ = '\0'; n++; return n; } }