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

📄 interop.cpp

📁 ESOAP一款专注于嵌入式的WEB SERVICE开发的软件。
💻 CPP
📖 第 1 页 / 共 2 页
字号:

  // check if it is the only one
  if( m->getParameterCount() > 1 )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: too many parameters =%d", m->getParameterCount() );
     return 0;
  }

  // check if it is array....
  if( p->getType() != esoap::xsd_array )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: type is not array =%d", p->getType() );
     return 0;
  }

  // send array back.
  esoap::Method *resp = mdata->out()->setMethod( "e:echoFloatArrayResponse", INTEROP_NS_URI );
  esoap::Array *a = new esoap::Array( "outputFloatArray" );
  for( size_t i = 0; i < p->getParameterCount(); i++ )
  {
    esoap::Parameter *param  = p->getParameter( i );
    float f                  = param->getFloat();
    a->addFloat( f );
  }
  a->setType( esoap::xsd_float );
  resp->addParameter( a );
  return 0;
}


/**
 * Receives one array of int and echoes it back to the caller.
 */
int echoStruct( esoap::MethodDataBlock *mdata )
{
  SYSLOG( "Method: echoStruct()\n" );
  // let's access the parameters...
  esoap::Method *m    = mdata->in()->getMethod();
  esoap::Parameter *p = mdata->in()->getRealParameter( m->getParameter( 0 ) );

  // check if we have a parameter, and it is the only one
  if( !p )
  {
    mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input Struct" );
    return 0;
  } 

  // check if it is the only one
  if( m->getParameterCount() > 1 )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: too many parameters for method =%d", m->getParameterCount() );
     return 0;
  }

  if( p->isHref() )
  {
    p = mdata->in()->getRealParameter( p );
  }

  // struct has three parameters
  if( p->getParameterCount() != 3 )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: too many parameters in struct =%d", p->getParameterCount() );
     return 0;
  }

  // send array back.
  esoap::Method *resp    = mdata->out()->setMethod( "e:echoStructResponse", INTEROP_NS_URI );

  esoap::Parameter *data = new esoap::Parameter( "outputStruct" );

  esoap::Parameter *param;
  // handle each parameter of the struct ...
  param  = p->getParameter( "varString" );
  if( !param )
  {
    mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varString" );
	delete data;
    return 0;
  } 
  esoap::String s  = param->getString();
  data->addString( "varString", s.c_str() );

  // handle each parameter of the struct ...
  param  = p->getParameter( "varInt" );
  if( !param )
  {
    mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varInt" );
	delete data;
    return 0;
  } 
  int i  = param->getInteger();
  data->addInteger( "varInt", i );


  // handle each parameter of the struct ...
  param  = p->getParameter( "varFloat" );
  if( !param )
  {
    mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varFloat" );
	delete data;
    return 0;
  } 
  float f  = param->getFloat();
  data->addFloat( "varFloat", f );

  // add extra namespace to the envelope...
  mdata->out()->addAttribute( "xmlns:ns1", "http://soapinterop.org/xsd" );
  data->setType( "ns1:SOAPStruct" );
  resp->addParameter( data );
  return 0;
}



/**
 * Receives one array of "structs" and echoes it back to the caller.
 */
int echoStructArray( esoap::MethodDataBlock *mdata )
{
  SYSLOG( "Method: echoStructArray()\n" );
  // let's access the parameters...
  esoap::Method *m    = mdata->in()->getMethod();
  esoap::Parameter *p = mdata->in()->getRealParameter( m->getParameter( 0 ) );

  // check if we have a parameter, and it is the only one
  if( !p )
  {
    mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input Array of structs" );
    return 0;
  } 

  // check if it is the only one
  if( m->getParameterCount() > 1 )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: too many parameters =%d", m->getParameterCount() );
     return 0;
  }

  if( p->isHref() )
  {
    p = mdata->in()->getRealParameter( p );
  }

  // check if it is array....
  if( p->getType() != esoap::xsd_array )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: type is not array =%d", p->getType() );
     return 0;
  }

  // send array back.
  esoap::Method *resp = mdata->out()->setMethod( "e:echoStructArrayResponse", INTEROP_NS_URI );
  esoap::Array *a = new esoap::Array( "outputStructArray" );
  for( size_t i = 0; i < p->getParameterCount(); i++ )
  {
    esoap::Parameter *a_i    = mdata->in()->getRealParameter( p->getParameter( i ) );
    esoap::Parameter *data = new esoap::Parameter( "outputStruct" );

    esoap::Parameter *param;
    // handle each parameter of the struct ...
    param  = a_i->getParameter( "varString" );
    if( !param )
    {
      mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varString" );
      delete data;
      delete a;
      return 0;
    } 
    esoap::String s  = param->getString();
    data->addString( "varString", s.c_str() );
  
    // handle each parameter of the struct ...
    param  = a_i->getParameter( "varInt" );
    if( !param )
    {
      mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varInt" );
      delete data;
      delete a;
      return 0;
    } 
    int j  = param->getInteger();
    data->addInteger( "varInt", j );
  
    // handle each parameter of the struct ...
    param  = a_i->getParameter( "varFloat" );
    if( !param )
    {
      mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varFloat" );
      delete data;
      delete a;
      return 0;
    } 
    float f  = param->getFloat();
    data->addFloat( "varFloat", f );
    a->addParameter( data );
  }
  // add extra namespace to the envelope...
  mdata->out()->addAttribute( "xmlns:ns1", "http://soapinterop.org/xsd" );
  a->setType( "ns1:SOAPStruct[]" );
  resp->addParameter( a );
  return 0;
}



/**
 * Receives one string and echoes it back to the caller.
 */
int echoDate( esoap::MethodDataBlock *mdata )
{
  SYSLOG( "Method: echoDate()\n" );
  // let's access the parameters...
  esoap::Method *m    = mdata->in()->getMethod();
  esoap::Parameter *p = m->getParameter( 0 );

  // check if we have a parameter, and it is the only one
  if( !p )
  {
    mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input string" );
    return 0;
  } 
  // check if it is the only one
  if( m->getParameterCount() > 1 )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: too many parameters =%d", m->getParameterCount() );
     return 0;
  }

  // seems to be ok.
  time_t t = p->getTimeInstant();
  esoap::Method *resp = mdata->out()->setMethod( "e:echoDateResponse", INTEROP_NS_URI );
  resp->addTimeInstant( "outputDate", t );
  return 0;
}


/**
 * Receives one string and echoes it back to the caller.
 */
int echoBase64( esoap::MethodDataBlock *mdata )
{
  SYSLOG( "Method: echoBase64()\n" );
  // let's access the parameters...
  esoap::Method *m    = mdata->in()->getMethod();
  esoap::Parameter *p = m->getParameter( 0 );

  // check if we have a parameter, and it is the only one
  if( !p )
  {
    mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input string" );
    return 0;
  } 
  // check if it is the only one
  if( m->getParameterCount() > 1 )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: too many parameters =%d", m->getParameterCount() );
     return 0;
  }

  const char   *b = 0;
  unsigned long len = 0;

  if( !p->decode( &b, &len ) )
  {
     mdata->out()->setFault( esoap::Fault::Server, 
                             "ERROR: error decoding Base64" );
     return 0;
  }
  esoap::Method *resp = mdata->out()->setMethod( "e:echoBase64Response", INTEROP_NS_URI );
  resp->addBinary( "outputBase64", b, len );
  delete [] ( char *)b;
  return 0;
}



⌨️ 快捷键说明

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