int ILibWebServer_UnRegisterVirtualDirectory(void *WebServerToken, char *vd, int vdLength) { struct ILibWebServer_StateModule *s = (struct ILibWebServer_StateModule*)WebServerToken; if(ILibHasEntry(s->VirtualDirectoryTable,vd,vdLength)!=0) { free(ILibGetEntry(s->VirtualDirectoryTable,vd,vdLength)); ILibDeleteEntry(s->VirtualDirectoryTable,vd,vdLength); return(0); } else { return(1); } }
void ILibWebServer_OnResponse(void *WebReaderToken, int InterruptFlag, struct packetheader *header, char *bodyBuffer, int *beginPointer, int endPointer, int done, void *user1, void *user2, int *PAUSE) { struct ILibWebServer_Session *ws = (struct ILibWebServer_Session*)user2; struct ILibWebServer_StateModule *wsm = (struct ILibWebServer_StateModule*)ws->Parent; char *tmp; int tmpLength; struct parser_result *pr; int PreSlash=0; if(ws->Reserved4!=0 || ws->Reserved5==0) { // Not Idle anymore ws->Reserved4 = 0; ws->Reserved5 = 1; ws->Reserved8 = 0; ILibLifeTime_Remove(((struct ILibWebServer_StateModule*)ws->Parent)->LifeTime,ws); } //Check Virtual Directory if(wsm->VirtualDirectoryTable!=NULL) { if(ws->Reserved7==NULL) { pr = ILibParseString(header->DirectiveObj,0,header->DirectiveObjLength,"/",1); if(pr->FirstResult->datalength==0) { // Does not start with '/' tmp = pr->FirstResult->NextResult->data; tmpLength = pr->FirstResult->NextResult->datalength; } else { // Starts with '/' tmp = pr->FirstResult->data; tmpLength = pr->FirstResult->datalength; PreSlash=1; } ILibDestructParserResults(pr); if(ILibHasEntry(wsm->VirtualDirectoryTable,tmp,tmpLength)!=0) { // Virtual Directory Defined header->DirectiveObj = tmp+tmpLength; header->DirectiveObjLength -= (tmpLength+PreSlash); ws->Reserved7 = ILibGetEntry(wsm->VirtualDirectoryTable,tmp,tmpLength); ((ILibWebServer_VirtualDirectory)((struct ILibWebServer_VirDir_Data*)ws->Reserved7)->callback)(ws,header,bodyBuffer,beginPointer,endPointer,done,((struct ILibWebServer_VirDir_Data*)ws->Reserved7)->user); } else if(ws->OnReceive!=NULL) { ws->OnReceive(ws,InterruptFlag,header,bodyBuffer,beginPointer,endPointer,done); } } else { ((ILibWebServer_VirtualDirectory)((struct ILibWebServer_VirDir_Data*)ws->Reserved7)->callback)(ws,header,bodyBuffer,beginPointer,endPointer,done,((struct ILibWebServer_VirDir_Data*)ws->Reserved7)->user); } } else if(ws->OnReceive!=NULL) { ws->OnReceive(ws,InterruptFlag,header,bodyBuffer,beginPointer,endPointer,done); } if(done!=0 && InterruptFlag==0 && header!=NULL && ws->Reserved8==0) { *PAUSE=1; } }
char *DLNAProtocolInfo_GetNameValuePair_Value(struct DLNAProtocolInfo *protocolInfo, char *Name) { return((char*)ILibGetEntry(protocolInfo->NameValueTable,Name,(int)strlen(Name))); }