enc = AMF_EncodeString(enc, pend, &av_createStream);
enc = AMF_EncodeNumber(enc, pend, ++r->m_numInvokes);
</pre><pre name="code" class="cpp">//======================================================================
typedef struct AVal
{
char *av_val;
int av_len;
} AVal;
//======================================================================
char * AMF_EncodeString(char *output, char *outend, const AVal *bv)
{
if(bv->av_len < 65536 && output + 1 + 2 + bv->av_len > outend) return NULL;
if(output + 1 + 4 + bv->av_len > outend) return NULL;
if(bv->av_len<65536)
{
*output++ = AMF_STRING;
output = AMF_EncodeInt16(output, outend, bv->av_len);
}
else
{
*output++ = AMF_LONG_STRING;
output = AMF_EncodeInt32(output, outend, bv->av_len);
}
memcpy(output, bv->av_val, bv->av_len);
output += bv->av_len;
return output;
}
//======================================================================
char* AMF_EncodeNumber(char *output, char *outend, double dVal)
{
if(output + 1 + 8 > outend) return NULL;
*output++=AMF_NUMBER; //type: Number
#if __FLOAT_WORD_ORDER == __BYTE_ORDER //#define __FLOAT_WORD_ORDER __BYTE_ORDER
#if __BYTE_ORDER == __BIG_ENDIAN
memcpy(output,&dVal,8);
#elif __BYTE_ORDER == __LITTLE_ENDIAN //#define __BYTE_ORDER __LITTLE_ENDIAN
{
unsigned char *ci, *co;
ci = (unsigned char*)&dVal;
co = (unsigned char*)output;
co[0]=ci[7];
co[1]=ci[6];
co[2]=ci[5];
co[3]=ci[4];
co[4]=ci[3];
co[5]=ci[2];
co[6]=ci[1];
co[7]=ci[0];
}
#endif
#else
//......
#endif
return output + 8;
}