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

📄 obexbinding.c

📁 SyncML ToolKits,学习syncml的参考工具包.非常好用.
💻 C
📖 第 1 页 / 共 5 页
字号:
            obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_CONNECTION" );            if ( header != NULL ) {                ObxHeaderFree( header );    } // end if            if ( object != NULL ) {                ObxObjectFree( ocb->obxHandle, object );            } // end if            return OBX_RC_OBEX_HEADER;        } // end if//These headers below are unnecessary in Put command./*    // Add header 'HEADER_CREATOR_ID'  (We do this for the palm we *may* be talking to)   XPTDEBUG(("OBX obxSendComplete() Add header '%s' value '%x'\n", "HEADER_CREATOR_ID", (unsigned int)creatorId ));   header = ObxHeaderNew( OBEX_HEADER_CREATORID );   rc = ( header == NULL ) ? OBX_RC_OBEX_HEADER : OBX_RC_OK;   if ( rc == OBX_RC_OK ) {      rc = ObxHeaderSetIntValue( header, creatorId );      if ( rc == OBX_RC_OK ) {         rc = ObxObjectAddHeader( ocb->obxHandle, object, header );         if ( rc == OBX_RC_OK ) {            header = NULL; // we no longer own the header         } // end if      } // end if   } // end if   // Clean up from an error   if ( rc != OBX_RC_OK ) {      obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_CREATORID" );      if ( header != NULL ) {         ObxHeaderFree( header );      } // end if      if ( object != NULL ) {         ObxObjectFree( ocb->obxHandle, object );      } // end if      return OBX_RC_OBEX_HEADER;   } // end if   */      /*   // %%% luz: temporarily re-enabled NAME header as we needed it for session ID (RespURI),               but that's not standard-like.   // Add header 'NAME'   header = ObxHeaderNew( OBEX_HEADER_NAME );   rc = ( header == NULL ) ? OBX_RC_OBEX_HEADER : OBX_RC_OK;   if ( rc == OBX_RC_OK ) {      XPTDEBUG(("OBX obxSendComplete() Add header '%s' value '%s'\n", "OBEX_HEADER_NAME", ocb->docInfo->docName ));      length = strlen( ocb->docInfo->docName ) + 1;      // luz %%% cast added      buffer = ObxUTF8ToUnicode( (const unsigned char *)ocb->docInfo->docName, length );      rc = ( buffer == NULL ) ? OBX_RC_MEMORY_ERROR : OBX_RC_OK;      if ( rc == OBX_RC_OK ) {         rc = ObxHeaderSetUnicodeValue( header, buffer );         if ( rc == OBX_RC_OK ) {            buffer = NULL;  // we no longer own the buffer            rc = ObxObjectAddHeader( ocb->obxHandle, object, header );            if ( rc == OBX_RC_OK ) {               header = NULL; // we no longer own the header            } // end if         } // end if      } // end if   } // end if     // Clean up from an error   if ( rc != OBX_RC_OK ) {      obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_NAME" );      if ( buffer != NULL ) {         ObxBufFree( buffer );      } // end if      if ( header != NULL ) {         ObxHeaderFree( header );      } // end if      if ( object != NULL ) {         ObxObjectFree( ocb->obxHandle, object );      } // end if      return OBX_RC_OBEX_HEADER;   } // end if   */    //We must embed Type header in Put command.  // Add header 'MIME_TYPE'  XPTDEBUG(("OBX obxSendComplete() Add header '%s' value '%s'\n", "OBEX_HEADER_TYPE", ocb->docInfo->mimeType ));  header = ObxHeaderNew( OBEX_HEADER_TYPE );  rc = ( header == NULL ) ? OBX_RC_OBEX_HEADER : OBX_RC_OK;  if ( rc == OBX_RC_OK ) {    length = strlen( ocb->docInfo->mimeType ) + 1;    buffer = ObxBufNew( length );    rc = ( buffer == NULL ) ? OBX_RC_MEMORY_ERROR : OBX_RC_OK;    if ( rc == OBX_RC_OK ) {      ObxBufWrite( buffer, ocb->docInfo->mimeType, length );      rc = ObxHeaderSetByteSequenceValue( header, buffer );      if ( rc == OBX_RC_OK ) {        buffer = NULL;  // we no longer own the buffer        rc = ObxObjectAddHeader( ocb->obxHandle, object, header );        if ( rc == OBX_RC_OK ) {          header = NULL; // we no longer own the header        } // end if      } // end if     } // end if   } // end if       // Clean up from an error   if ( rc != OBX_RC_OK ) {      obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_TYPE" );      if ( buffer != NULL ) {          ObxBufFree( buffer );      } // end if      if ( header != NULL ) {         ObxHeaderFree( header );      } // end if      if ( object != NULL ) {         ObxObjectFree( ocb->obxHandle, object );      } // end if      return OBX_RC_OBEX_HEADER;   } // end if } // end if (ocb->role == XPT_REQUEST_SENDER)  // Add header 'LENGTH'  XPTDEBUG(("OBX obxSendComplete() Add header '%s' value '%d'\n", "OBEX_HEADER_LENGTH", ocb->docInfo->cbLength ));  header = ObxHeaderNew( OBEX_HEADER_LENGTH );  rc = ( header == NULL ) ? OBX_RC_OBEX_HEADER : OBX_RC_OK;  if ( rc == OBX_RC_OK ) {      rc = ObxHeaderSetIntValue( header, ocb->docInfo->cbLength );      if ( rc == OBX_RC_OK ) {            rc = ObxObjectAddHeader( ocb->obxHandle, object, header );            if ( rc == OBX_RC_OK ) {              header = NULL; // we no longer own the header            } // end if      } // end if  } // end if  if ( rc != OBX_RC_OK ) {      obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_LENGTH" );      if ( header != NULL ) {         ObxHeaderFree( header );      } // end if      if ( object != NULL ) {         ObxObjectFree( ocb->obxHandle, object );      } // end if      return OBX_RC_OBEX_HEADER;  } // end if    //These headers below are unnecessary in Put command./*    // Add header 'DESCRIPTION'   XPTDEBUG(("OBX obxSendComplete() Add header '%s' value '%s'\n", "OBEX_HEADER_DESCRIPTION", ocb->docInfo->mimeType ));   header = ObxHeaderNew( OBEX_HEADER_DESCRIPTION );   rc = ( header == NULL ) ? OBX_RC_OBEX_HEADER : OBX_RC_OK;   if ( rc == OBX_RC_OK ) {      length = strlen( ocb->docInfo->mimeType ) + 1;      // luz %%%: cast added      buffer = ObxUTF8ToUnicode( (const unsigned char *)ocb->docInfo->mimeType, length );      rc = ( buffer == NULL ) ? OBX_RC_MEMORY_ERROR : OBX_RC_OK;      if ( rc == OBX_RC_OK ) {         rc = ObxHeaderSetUnicodeValue( header, buffer );         if ( rc == OBX_RC_OK ) {            buffer = NULL;  // we no longer own the buffer            rc = ObxObjectAddHeader( ocb->obxHandle, object, header );            if ( rc == OBX_RC_OK ) {               header = NULL; // we no longer own the header            } // end if         } // end if      } // end if   } // end if   // Clean up from an error   if ( rc != OBX_RC_OK ) {      obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_DESCRIPTION" );      if ( buffer != NULL ) {         ObxBufFree( buffer );      } // end if      if ( header != NULL ) {         ObxHeaderFree( header );      } // end if      if ( object != NULL ) {         ObxObjectFree( ocb->obxHandle, object );      } // end if      return OBX_RC_OBEX_HEADER;   } // end if    // Add header 'XSYNCMLHMAC'    if (ocb->pchXSyncmlHmac != NULL)    {        header = ObxHeaderNew( OBEX_HEADER_XSYNCMLHMAC );        rc = ( header == NULL ) ? OBX_RC_OBEX_HEADER : OBX_RC_OK;        if ( rc == OBX_RC_OK ) {            XPTDEBUG(("OBX obxSendComplete() Add header '%s' value '%s'\n", "OBEX_HEADER_XSYNCMLHMAC", ocb->pchXSyncmlHmac ));            length = strlen( ocb->pchXSyncmlHmac ) + 1;            buffer = ObxUTF8ToUnicode( (const unsigned char *)ocb->pchXSyncmlHmac, length ); // %%% luz 2002-04-16: added cast            rc = ( buffer == NULL ) ? OBX_RC_MEMORY_ERROR : OBX_RC_OK;            if ( rc == OBX_RC_OK ) {                rc = ObxHeaderSetUnicodeValue( header, buffer );                if ( rc == OBX_RC_OK ) {                    buffer = NULL;  // we no longer own the buffer                    rc = ObxObjectAddHeader( ocb->obxHandle, object, header );                    if ( rc == OBX_RC_OK ) {                        header = NULL; // we no longer own the header                    } // end if                } // end if            } // end if        } // end if            // Clean up from an error        if ( rc != OBX_RC_OK ) {            obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_NAME" );            if ( buffer != NULL ) {                ObxBufFree( buffer );            } // end if            if ( header != NULL ) {                ObxHeaderFree( header );            } // end if            if ( object != NULL ) {                ObxObjectFree( ocb->obxHandle, object );            } // end if            return OBX_RC_OBEX_HEADER;        } // end if    } // end if (Header XSYNCMLHMAC)    */   // Add header 'BODY'   XPTDEBUG(("OBX obxSendComplete() Add header '%s'\n", "OBEX_HEADER_BODY" ));   header = ObxHeaderNew( OBEX_HEADER_BODY );   rc = ( header == NULL ) ? OBX_RC_OBEX_HEADER : OBX_RC_OK;   if ( rc == OBX_RC_OK ) {      length = obxGetBufferForSend( ocb, &buffer );      rc = ( length > 0 ) ? OBX_RC_OK : OBX_RC_OBEX_HEADER;      if ( rc == OBX_RC_OK ) {         rc = ObxHeaderSetByteSequenceValue( header, buffer );         if ( rc == OBX_RC_OK ) {            buffer = NULL;  // we no longer own the buffer            rc = ObxObjectAddHeader( ocb->obxHandle, object, header );            if ( rc == OBX_RC_OK ) {               header = NULL; // we no longer own the header            } // end if         } // end if      } // end if   } // end if   // Clean up from an error   if ( rc != OBX_RC_OK ) {      obxRecordError( OBX_ERRORMSG_OBEX_HEADER, "obxSendComplete()", "OBEX_HEADER_BODY" );      if ( buffer != NULL ) {         ObxBufFree( buffer );      } // end if      if ( header != NULL ) {         ObxHeaderFree( header );      } // end if      if ( object != NULL ) {         ObxObjectFree( ocb->obxHandle, object );      } // end if      return OBX_RC_OBEX_HEADER;   } // end if        if (ocb->role == XPT_REQUEST_SENDER) {        /* we are client -> use PUT */        if ( ( response = ObxObjectNew( ocb->obxHandle, OBEX_CMD_NULL ) ) == NULL ) {      rc = OBX_RC_GENERAL_ERROR;   } // end else if   // Flow obxPUT   else if ( ObxTransactionSend( ocb->obxHandle, object, response ) != OBX_RC_OK ) {      rc = OBX_RC_GENERAL_ERROR;   } // end else if   // Determine if obxPUT successful   else if ( response->cmd != ( OBEX_CMD_FINAL + OBEX_RSP_SUCCESS ) ) {      rc = OBX_RC_GENERAL_ERROR;   } // end else if            } else if (ocb->role == XPT_REQUEST_RECEIVER) {        /* we are server -> wait for GET */        rc = ObxGetSend(ocb->obxHandle, object, ocb->docInfo->mimeType);    }   // Clean any storage that remains allocated   if ( response != NULL ) {      ObxObjectFree( ocb->obxHandle, response );   } // end if   if ( buffer != NULL ) {      ObxBufFree( buffer );   } // end if   if ( header != NULL ) {      ObxHeaderFree( header );   } // end if   if ( object != NULL ) {      ObxObjectFree( ocb->obxHandle, object );   } // end if   // We're done with docInfo now.. clear it so it can be used to receive data.   if ( ocb->docInfo ) {        FREE_MEM( ocb->docInfo->hmacInfo );        FREE_MEM( ocb->docInfo );    } // end if    // since pchSyncmlHmac belongs to docInfo, clear it too    if ( ocb->pchXSyncmlHmac ) {        FREE_MEM( ocb->pchXSyncmlHmac );   } // end if   return rc;}/*********************************************************************************//***************************** Private Functions *********************************//*********************************************************************************//*** Add a connection to sequence in the provided service object.** Ignores call if object already in the chain.*/// **MHB** Where is the comparison to check if object already in chain?// **MHB** Investigate using ObxList instead of ObxSequenceNode.static Ret_t obxAddConnection( ObxServiceBlock *service,                               ObxConnectionBlock *connection ) {   ObxSequenceNode *cursor

⌨️ 快捷键说明

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