📄 obexbinding.c
字号:
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 + -