int CHttpMessage::EncodeMessage(CMemblock* apoBuffer) { char* lpcStart = apoBuffer->GetWrite(); int liRet = 0; this->SaveMBWrite(apoBuffer); if (lpcStart == NULL) return HTTP_ERROR_INVAL; liRet = EncodeStartLine(apoBuffer); if (liRet <0) goto ENCODE_FAILED; liRet = EncodeHeader(apoBuffer); if (liRet <0) goto ENCODE_FAILED; liRet = EncodeBody(apoBuffer); if (liRet <0) goto ENCODE_FAILED; return apoBuffer->GetWrite() - lpcStart; ENCODE_FAILED: this->RestoreMBWrite(apoBuffer); return liRet; }
static int EncodeMessage(Tcl_Interp *interp, TnmSnmp *session, TnmSnmpPdu *pdu, TnmBer *ber) { u_char *seqToken; int version = 0, parameterLen = 0; u_char *parameter = NULL; #ifdef TNM_SNMPv2U #define PARAM_MAX_LENGTH 340 u_char buffer[PARAM_MAX_LENGTH]; if (session->qos & USEC_QOS_PRIV) { Tcl_SetResult(interp, "encryption not supported", TCL_STATIC); return TCL_ERROR; } #endif ber = TnmBerEncSequenceStart(ber, ASN1_SEQUENCE, &seqToken); switch (session->version) { case TNM_SNMPv1: version = 0; parameter = (unsigned char *) Tcl_GetStringFromObj(session->community, ¶meterLen); break; case TNM_SNMPv2C: version = 1; parameter = (unsigned char *) Tcl_GetStringFromObj(session->community, ¶meterLen); break; #ifdef TNM_SNMPv2U case TNM_SNMPv2U: version = 2; parameter = buffer; parameterLen = EncodeUsecParameter(session, pdu, parameter); break; #endif case TNM_SNMPv3: version = 3; break; } ber = TnmBerEncInt(ber, ASN1_INTEGER, version); if (version < 3) { ber = TnmBerEncOctetString(ber, ASN1_OCTET_STRING, (char *) parameter, parameterLen); ber = EncodePDU(interp, session, pdu, ber); if (ber == NULL) { if (*Tcl_GetStringResult(interp) == '\0') { Tcl_SetResult(interp, TnmBerGetError(NULL), TCL_STATIC); } return TCL_ERROR; } } if (version == 3) { int secParamLength; unsigned char *secParam; ber = EncodeHeader(interp, session, pdu, ber); secParam = EncodeUsmSecParams(session, pdu, &secParamLength); if (! secParam) { Tcl_SetResult(interp, TnmBerGetError(NULL), TCL_STATIC); return TCL_ERROR; } ber = TnmBerEncOctetString(ber, ASN1_OCTET_STRING, (char *) secParam, secParamLength); ber = EncodeScopedPDU(interp, session, pdu, ber); if (*Tcl_GetStringResult (interp) == '\0') { Tcl_SetResult(interp, TnmBerGetError(NULL), TCL_STATIC); } } ber = TnmBerEncSequenceEnd(ber, seqToken); return (ber ? TCL_OK : TCL_ERROR); }