int CMSConnectionComplete(struct Upnp_Action_Request *actEvent) { // PSERV_COMMON serv = &dms.dmsServ[DMS_SERVICE_CMS]; ZTrace(DBG_DMS_CMS, "Entering"); actEvent->ErrCode = UPNP_SOAP_E_NOT_IMPLEMENTED; strcpy(actEvent->ErrStr, "Not Implemented"); ZTrace(DBG_DMS_CMS, "Exiting->%d", actEvent->ErrCode); return actEvent->ErrCode; }
int CMSGetProtocolInfo(struct Upnp_Action_Request *actEvent) { char *source; char *sink; ZTrace(DBG_DMS_CMS, "Entering"); if ((source = DMSGetVariable(DMS_SERVICE_CMS, "SourceProtocolInfo")) == NULL) { ZError(DBG_DMS_CDS, "Unable to get SourceProtocolInfo Variable"); goto funcOut; } // No input parameters... Return protInfo in the action Result... // ActionResult has to be setup... // In case of errors, need to setup ErrCode and ErrStr.... actEvent->ErrCode = UPNP_E_SUCCESS; if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetProtocolInfo", dms.dmsServ[DMS_SERVICE_CMS].serviceType, "Source", source) != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set Source"); goto funcOut; } if ((sink = DMSGetVariable(DMS_SERVICE_CMS, "SinkProtocolInfo")) == NULL) { ZError(DBG_DMS_CDS, "Unable to get SinkProtocolInfo Variable"); goto funcOut; } if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetProtocolInfo", dms.dmsServ[DMS_SERVICE_CMS].serviceType, "Sink", sink) != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set Sink"); goto funcOut; } funcOut: if (actEvent->ErrCode != UPNP_E_SUCCESS) { actEvent->ActionResult = NULL; actEvent->ErrCode = UPNP_E_INTERNAL_ERROR; strcpy(actEvent->ErrStr, "Internal Error"); } ZTrace(DBG_DMS_CMS, "Exiting->%d", actEvent->ErrCode); return actEvent->ErrCode; }
int32_t TrapHandler(struct NaClApp *nap, uint32_t args) { uint64_t *sargs; int retcode = 0; int i; assert(nap != NULL); assert(nap->manifest != NULL); /* * translate address from user space to system * note: cannot set "trap error" */ sargs = (uint64_t*)NaClUserToSys(nap, (uintptr_t)args); i = FunctionIndexById(*sargs); ZLOGS(LOG_DEBUG, "%s called", function[i]); ZTrace("untrusted code"); switch(*sargs) { case TrapFork: if(Daemon(nap) == 0) { SyscallZTrace(5, function[5]); ZVMExitHandle(nap, 0); } break; case TrapExit: ZVMExitHandle(nap, (int32_t)sargs[2]); break; case TrapRead: retcode = ZVMReadHandle(nap, (int)sargs[2], (char*)sargs[3], (int32_t)sargs[4], sargs[5]); break; case TrapWrite: retcode = ZVMWriteHandle(nap, (int)sargs[2], (char*)sargs[3], (int32_t)sargs[4], sargs[5]); break; case TrapJail: retcode = ZVMJailHandle(nap, (uint32_t)sargs[2], (int32_t)sargs[3]); break; case TrapUnjail: retcode = ZVMUnjailHandle(nap, (uint32_t)sargs[2], (int32_t)sargs[3]); break; default: retcode = -EPERM; ZLOG(LOG_ERROR, "function %ld is not supported", *sargs); break; } /* report, ztrace and return */ FastReport(); ZLOGS(LOG_DEBUG, "%s returned %d", function[i], retcode); SyscallZTrace(i, function[i], sargs[2], sargs[3], sargs[4], sargs[5], retcode); return retcode; }
static void SyscallZTrace(int i, ...) { char *msg; va_list ap; char *fmt[] = {"%s(%d, %p, %d, %ld) = %d", "%s(%d, %p, %d, %ld) = %d", "%s(%p, %d) = %d", "%s(%p, %d) = %d", "%s(%d) = %d", "%s()"}; va_start(ap, i); msg = g_strdup_vprintf(fmt[i], ap); va_end(ap); ZTrace(msg); g_free(msg); }
int CMSGetCurrentConnectionIDs(struct Upnp_Action_Request *actEvent) { char *connId; PSERV_COMMON serv = &dms.dmsServ[DMS_SERVICE_CMS]; ZTrace(DBG_DMS_CMS, "Entering"); actEvent->ErrCode = UPNP_E_SUCCESS; if ((connId = DMSGetVariable(DMS_SERVICE_CMS, "CurrentConnectionIDs")) == NULL) { ZError(DBG_DMS_CDS, "Unable to get CurrentConnectionIDs Variable"); goto funcOut; } // Need to return only connectionID of zero as we don't support // prepareforConnection fn... if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetCurrentConnectionIDs", serv->serviceType, "ConnectionIDs", connId) != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set ConnectionIDs"); goto funcOut; } funcOut: if (actEvent->ErrCode != UPNP_E_SUCCESS) { actEvent->ActionResult = NULL; actEvent->ErrCode = UPNP_E_INTERNAL_ERROR; strcpy(actEvent->ErrStr, "Internal Error"); } ZTrace(DBG_DMS_CMS, "Exiting->%d", actEvent->ErrCode); return actEvent->ErrCode; }
void ReportDtor(int zvm_ret) { SetExitCode(zvm_ret); /* broken session */ if(zvm_code != 0) { ZLOGS(LOG_ERROR, "SESSION %d FAILED WITH ERROR %d: %s", gnap->manifest == NULL ? 0 : gnap->manifest->node, zvm_code, strerror(zvm_code)); FinalDump(gnap); ZTrace("[final dump]"); } ChannelsDtor(gnap->manifest); ZTrace("[channels destruction]"); Report(gnap); ZTrace("[report]"); NaClAppDtor(gnap); /* free user space and globals */ ZTrace("[untrusted context closing]"); ManifestDtor(gnap->manifest); /* dispose manifest and channels */ ZTrace("[manifest deallocating]"); FreeDispatchThunk(); ZTrace("[thunk deallocating]"); ZLogDtor(); ZTrace("[zlog deallocating]"); /* free local resources and exit */ g_string_free(digests, TRUE); g_string_free(cmd, TRUE); g_free(zvm_state); ZTrace("[exit]"); ZTraceDtor(1); ZTraceNameDtor(); _exit(zvm_code); }
PCP_DEV_NODE findDMSByIP( char* ip, int *i_ifIndex ) { int ifIndex; PCP_DEV_NODE devNode = NULL; for (ifIndex = mpsync.numAddr-1; ifIndex >=0; ifIndex--) { if (mpsync.dmcHandle[ifIndex] == NULL ) continue; devNode = DMCFindFirstDev(mpsync.dmcHandle[ifIndex]); while (devNode) { ZTrace( DBG_MISC, "DEV ifindex->%d und->%s, type->%s", ifIndex, devNode->UDN, devNode->deviceType); if (strstr(devNode->descDocURL, ip)) { *i_ifIndex = ifIndex; break; } devNode = DMCFindNextDev(mpsync.dmcHandle[ifIndex]); } DMCFindCloseDev(mpsync.dmcHandle[ifIndex]); if ( devNode ) break; } if ( devNode == NULL ) ZError( DBG_MISC, "can not find the dms server, does it removed?" ); return devNode; }
int CMSGetCurrentConnectionInfo(struct Upnp_Action_Request *actEvent) { char *value = NULL; PSERV_COMMON serv = &dms.dmsServ[DMS_SERVICE_CMS]; ZTrace(DBG_DMS_CMS, "Entering"); actEvent->ErrCode = UPNP_E_SUCCESS; // From the request get the connection ID... if (!(value = ixmlGetFirstDocumentItem(actEvent->ActionRequest, "ConnectionID"))) { strcpy(actEvent->ErrStr, "Invalid Arguments"); actEvent->ErrCode = UPNP_SOAP_E_INVALID_ARGS; ZError(DBG_DMS_CMS, "ConnectionID Value not present"); goto funcOut; } // Make sure the value is zero... if (atoi(value) != 0) { strcpy(actEvent->ErrStr, "Invalid Connection Reference"); actEvent->ErrCode = UPNP_SOAP_E_INVALID_CONN_REF; ZError(DBG_DMS_CMS, "ConnectionID Value is not zero->%d", atoi(value)); goto funcOut; } // Return variables related to connection id... if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetCurrentConnectionInfo", serv->serviceType, "RcsID", "-1") != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set RcsID"); goto intError; } if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetCurrentConnectionInfo", serv->serviceType, "AVTransportID", "-1") != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set AVTransportID"); goto intError; } if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetCurrentConnectionInfo", serv->serviceType, "PeerConnectionManager", "") != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set PeerConnectionManager"); goto intError; } if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetCurrentConnectionInfo", serv->serviceType, "PeerConnectionID", "-1") != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set PeerConnectionID"); goto intError; } if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetCurrentConnectionInfo", serv->serviceType, "Direction", "Output") != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set Output"); goto intError; } if (UpnpAddToActionResponse(&actEvent->ActionResult, "GetCurrentConnectionIDs", serv->serviceType, "Status", "Unknown") != UPNP_E_SUCCESS) { ZError(DBG_DMS_CMS, "Unable to set Status"); goto intError; } goto funcOut; intError: actEvent->ActionResult = NULL; actEvent->ErrCode = UPNP_E_INTERNAL_ERROR; strcpy(actEvent->ErrStr, "Internal Error"); funcOut: ZTrace(DBG_DMS_CMS, "Exiting->%d", actEvent->ErrCode); if (value) { free(value); } return actEvent->ErrCode; }
int32_t TrapHandler(struct NaClApp *nap, uint32_t args) { uint64_t *sargs; int retcode = 0; assert(nap != NULL); assert(nap->manifest != NULL); /* * translate address from user space to system * note: cannot set "trap error" */ sargs = (uint64_t*)NaClUserToSys(nap, (uintptr_t)args); ZLOGS(LOG_DEBUG, "%s called", FunctionName(*sargs)); ZTrace("untrusted code"); switch(*sargs) { case TrapFork: retcode = Daemon(nap); if(retcode) break; SyscallZTrace(*sargs, 0); SyscallZTrace(TrapExit, 0); ZVMExitHandle(nap, 0); break; case TrapExit: SyscallZTrace(*sargs, sargs[2]); ZVMExitHandle(nap, (int32_t)sargs[2]); break; case TrapRead: retcode = ZVMReadHandle(nap, (int)sargs[2], (char*)sargs[3], (int32_t)sargs[4], sargs[5]); break; case TrapWrite: retcode = ZVMWriteHandle(nap, (int)sargs[2], (char*)sargs[3], (int32_t)sargs[4], sargs[5]); break; case TrapJail: retcode = ZVMJailHandle(nap, (uint32_t)sargs[2], (int32_t)sargs[3]); break; case TrapUnjail: retcode = ZVMUnjailHandle(nap, (uint32_t)sargs[2], (int32_t)sargs[3]); break; #ifdef ZVM_SOCKETS case TrapSocket: retcode = ZVM_socket((int)sargs[2], (int)sargs[3], (int)sargs[4]); break; case TrapBind: { const struct sockaddr *addr = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); retcode = ZVM_bind((int)sargs[2], addr, (socklen_t)sargs[4]); break; } case TrapConnect: { const struct sockaddr *addr = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); retcode = ZVM_connect((int)sargs[2], addr, (socklen_t)sargs[4]); break; } case TrapAccept: { struct sockaddr *addr = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); socklen_t *len = (void*)NaClUserToSys(nap, (uintptr_t)sargs[4]); retcode = ZVM_accept((int)sargs[2], addr, len); break; } case TrapListen: retcode = ZVM_listen((int)sargs[2], (int)sargs[3]); break; case TrapRecv: { void *buf = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); retcode = ZVM_recv((int)sargs[2], buf, (size_t)sargs[4], (int)sargs[5]); break; } case TrapRecvfrom: { void *buf = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); struct sockaddr *addr = (void*)NaClUserToSys(nap, (uintptr_t)sargs[6]); socklen_t *len = (void*)NaClUserToSys(nap, (uintptr_t)sargs[7]); retcode = ZVM_recvfrom((int)sargs[2], buf, (size_t)sargs[4], (int)sargs[5], addr, len); break; } case TrapRecvmsg: { struct msghdr *msg = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); retcode = ZVM_recvmsg((int)sargs[2], msg, (int)sargs[4]); break; } case TrapSend: { const void *buf = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); retcode = ZVM_send((int)sargs[2], buf, (size_t)sargs[4], (int)sargs[5]); break; } case TrapSendto: { const void *buf = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); const struct sockaddr *addr = (void*)NaClUserToSys(nap, (uintptr_t)sargs[6]); retcode = ZVM_sendto((int)sargs[2], buf, (size_t)sargs[4], (int)sargs[5], addr, (socklen_t)sargs[7]); break; } case TrapSendmsg: { const struct msghdr *msg = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); retcode = ZVM_sendmsg((int)sargs[2], msg, (int)sargs[4]); break; } case TrapGetsockopt: { void *optval = (void*)NaClUserToSys(nap, (uintptr_t)sargs[5]); socklen_t *len = (void*)NaClUserToSys(nap, (uintptr_t)sargs[6]); retcode = ZVM_getsockopt((int)sargs[2], (int)sargs[3], (int)sargs[4], optval, len); break; } case TrapSetsockopt: { const void *optval = (void*)NaClUserToSys(nap, (uintptr_t)sargs[5]); retcode = ZVM_setsockopt((int)sargs[2], (int)sargs[3], (int)sargs[4], optval, (socklen_t)sargs[6]); break; } case TrapSelect: { fd_set *readfds = (void*)NaClUserToSys(nap, (uintptr_t)sargs[3]); fd_set *writefds = (void*)NaClUserToSys(nap, (uintptr_t)sargs[4]); fd_set *exceptfds = (void*)NaClUserToSys(nap, (uintptr_t)sargs[5]); struct timeval *timeout = (void*)NaClUserToSys(nap, (uintptr_t)sargs[6]); retcode = ZVM_select((int)sargs[2], readfds, writefds, exceptfds, timeout); break; } case TrapPoll: { struct pollfd *fds = (void*)NaClUserToSys(nap, (uintptr_t)sargs[2]); retcode = ZVM_poll(fds, (nfds_t)sargs[3], (int)sargs[4]); break; } case TrapGethostbyname: { const char *name = (void*)NaClUserToSys(nap, (uintptr_t)sargs[2]); retcode = (int)(intptr_t)ZVM_gethostbyname(name); break; } case TrapGethostbyaddr: { const void *addr = (void*)NaClUserToSys(nap, (uintptr_t)sargs[2]); retcode = (int)(intptr_t)ZVM_gethostbyaddr(addr, (socklen_t)sargs[3], (int)sargs[4]); break; } case TrapClose: retcode = ZVM_close((int)sargs[2]); break; #endif default: retcode = -EPERM; ZLOG(LOG_ERROR, "function %ld is not supported", *sargs); break; } /* report, ztrace and return */ FastReport(); ZLOGS(LOG_DEBUG, "%s returned %d", FunctionName(*sargs), retcode); SyscallZTrace(*sargs, retcode, sargs[2], sargs[3], sargs[4], sargs[5], sargs[6], sargs[7]); return retcode; }
void TopPane::UpdateBits() { /* ORIGINAL ALLEGIANCE VERSION. ZEnter("TopPane::UpdateBits()"); if (m_bNeedPaint) { ZTrace("m_bNeedPaint == true"); if (CalcPaint()) { m_bNeedPaint = true; m_bPaintAll = true; } ZTrace("after CalcPaint() m_bNeedPaint ==" + ZString(m_bNeedPaint)); ZTrace("after CalcPaint() m_bPaintAll ==" + ZString(m_bPaintAll )); m_bPaintAll |= g_bPaintAll; InternalPaint(m_psurface); m_bNeedPaint = false; } ZExit("TopPane::UpdateBits()");*/ ZEnter("TopPane::UpdateBits()"); { HRESULT hr; bool bRenderTargetRequired; PrivateSurface* pprivateSurface; CastTo(pprivateSurface, m_psurface); bRenderTargetRequired = pprivateSurface->GetSurfaceType().Test(SurfaceTypeRenderTarget() ) == true; if( bRenderTargetRequired == true ) { TEXHANDLE hTexture = pprivateSurface->GetTexHandle( ); _ASSERT( hTexture != INVALID_TEX_HANDLE ); hr = CVRAMManager::Get()->PushRenderTarget( hTexture ); } ZTrace("m_bNeedPaint == true"); CalcPaint(); m_bNeedPaint = true; m_bPaintAll = true; ZTrace("after CalcPaint() m_bPaintAll ==" + ZString(m_bPaintAll )); WinPoint offset( 0, 0 ); // Call InternalPaint() with the child offset and parent size as params and create initial clipping rect. WinRect rectClip( 0, 0, (int) m_psurface->GetSize().X(), (int) m_psurface->GetSize().Y() ); m_bPaintAll |= g_bPaintAll; InternalPaint( m_psurface ); m_bNeedPaint = false; if( bRenderTargetRequired == true ) { CVRAMManager::Get()->PopRenderTarget( ); } } ZExit("TopPane::UpdateBits()"); /* { ZTrace("m_bNeedPaint == true"); CalcPaint(); m_bNeedPaint = true; m_bPaintAll = true; ZTrace("after CalcPaint() m_bNeedPaint ==" + ZString(m_bNeedPaint)); ZTrace("after CalcPaint() m_bPaintAll ==" + ZString(m_bPaintAll )); m_bPaintAll |= g_bPaintAll; // localOffset.SetY( localOffset.Y() - (int)m_psurface->GetSize().Y() ); // localOffset += globalOffset; WinPoint offset( localOffset ); // Remove offset now. offset.SetY( offset.Y() - (int)m_psurface->GetSize().Y() ); // Call InternalPaint() with the child offset and parent size as params and create initial clipping rect. WinRect rectClip( offset.X(), offset.Y(), offset.X() + (int) m_psurface->GetSize().X(), offset.Y() + (int) m_psurface->GetSize().Y() ); // m_psurface is a dummy surface. Store the context. InternalPaint( m_psurface, offset, rectClip ); m_bNeedPaint = false; } ZExit("TopPane::UpdateBits()");*/ }