teamtalk服务器端发送报文

发送报文是通过调用CImConn的SendPdu()函数来实现的:

1
int SendPdu(CImPdu* pPdu) { return Send(pPdu->GetBuffer(), pPdu->GetLength()); }

再看一下CImPdu里具体是什么内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
class DLL_MODIFIER CImPdu
{
public:
CImPdu();
virtual ~CImPdu() {}

uchar_t* GetBuffer();
...

protected:
CSimpleBuffer m_buf;
PduHeader_t m_pdu_header;
};

其中m_buf是用来存储报文头部和数据部分的CSimpleBuffer类型成员变量,具体的CSimpleBuffer定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
class DLL_MODIFIER CSimpleBuffer
{
public:
CSimpleBuffer();
~CSimpleBuffer();
uchar_t* GetBuffer() { return m_buffer; }
...

private:
uchar_t* m_buffer; // 关键
uint32_t m_alloc_size;
uint32_t m_write_offset;
};

所以,CImPdu的GetBuffer能够一层一层往下得到具体的发送报文内容的uchar_t*的指针。