Пример #1
0
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;
}
Пример #2
0
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,
					 &parameterLen);
	break;
      case TNM_SNMPv2C:
	version = 1;
	parameter = (unsigned char *) Tcl_GetStringFromObj(session->community,
					 &parameterLen);
	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);
}