SmlCredPtr_t get_credentials(authDesc_t * authP) { SmlCredPtr_t credP = NULL; switch (authP->type) { case AUTH_TYPE_BASIC: { char * digest; digest = prv_get_digest_basic(authP); if (digest == NULL) goto error; credP = smlAllocCred(); if (credP) { credP->meta = convert_to_meta("b64", META_TYPE_BASIC); set_pcdata_string(credP->data, digest); } free(digest); } break; case AUTH_TYPE_DIGEST: { char * digest; digest = prv_get_digest_md5(authP); if (digest == NULL) goto error; credP = smlAllocCred(); if (credP) { credP->meta = convert_to_meta("b64", META_TYPE_DIGEST); set_pcdata_string(credP->data, digest); } free(digest); } break; default: // Authentification is either done at another level or not supported break; } error: return credP; }
static SmlSyncHdrPtr_t prvGetHeader(internals_t * internP) { SmlSyncHdrPtr_t headerP; headerP = smlAllocSyncHdr(); if (headerP) { set_pcdata_string(headerP->version, "1.2"); set_pcdata_string(headerP->proto, "DM/1.2"); set_pcdata_hex(headerP->sessionID, internP->session_id); set_pcdata_int(headerP->msgID, internP->message_id); set_pcdata_int(headerP->msgID, internP->message_id); set_pcdata_string(headerP->target->locURI, internP->account->server_uri); set_pcdata_string(headerP->source->locURI, internP->account->id); if (OMADM_SYNCML_ERROR_AUTHENTICATION_ACCEPTED != internP->clt_auth) { headerP->cred = get_credentials(internP->account->toServerCred); } headerP->meta = smlAllocPcdata(); if (headerP->meta) { SmlMetInfMetInfPtr_t metInfP; metInfP = smlAllocMetInfMetInf(); if (metInfP) { metInfP->maxmsgsize = smlString2Pcdata(PRV_MAX_MESSAGE_SIZE); headerP->meta->contentType = SML_PCDATA_EXTENSION; headerP->meta->extension = SML_EXT_METINF; headerP->meta->length = 0; headerP->meta->content = metInfP; } else { smlFreePcdata(headerP->meta); headerP->meta = NULL; } } } return headerP; }
SmlStatusPtr_t create_status(internals_t * internP, int code, SmlGenericCmdPtr_t pContent) { SmlStatusPtr_t statusP; statusP = smlAllocStatus(); // if pContent is nil, we are replying to an header if (pContent) { set_pcdata_pcdata(statusP->cmdRef, pContent->cmdID); } else { set_pcdata_string(statusP->cmdRef, "0"); } set_pcdata_string(statusP->msgRef, internP->reply_ref); set_pcdata_string(statusP->cmd, proto_as_string(pContent?pContent->elementType:SML_PE_HEADER)); set_pcdata_int(statusP->data, code); return statusP; }