Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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);
}
Пример #5
0
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;
}
Пример #6
0
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);
}
Пример #7
0
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;
}
Пример #8
0
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;
}
Пример #9
0
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;
}
Пример #10
0
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()");*/
}