本文整理汇总了C++中Tlv::Size方法的典型用法代码示例。如果您正苦于以下问题:C++ Tlv::Size方法的具体用法?C++ Tlv::Size怎么用?C++ Tlv::Size使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Tlv
的用法示例。
在下文中一共展示了Tlv::Size方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: convert
QString ICQClient::convert(const char *text, unsigned size, TlvList &tlvs, unsigned n)
{
string charset = "us-ascii";
Tlv *tlvCharset = NULL;
for (unsigned i = 0;; i++){
Tlv *tlv = tlvs[i];
if (tlv == NULL)
break;
if (tlv->Num() != n)
continue;
if (tlvCharset && (tlv->Size() < tlvCharset->Size()))
continue;
tlvCharset = tlv;
}
if (tlvCharset){
const char *type = *tlvCharset;
const char *p = strchr(type, '\"');
if (p){
p++;
char *e = strchr((char*)p, '\"');
if (e)
*e = 0;
charset = p;
}else{
charset = type;
}
}
QString res;
if (strstr(charset.c_str(), "us-ascii") || strstr(charset.c_str(), "utf")){
res = QString::fromUtf8(text, size);
}else if (strstr(charset.c_str(), "unicode")){
unsigned short *p = (unsigned short*)text;
for (unsigned i = 0; i < size - 1; i += 2, p++)
res += QChar((unsigned short)htons(*p));
}else{
QTextCodec *codec = QTextCodec::codecForName(charset.c_str());
if (codec){
res = codec->toUnicode(text, size);
}else{
res = QString::fromUtf8(text, size);
log(L_WARN, "Unknown encoding %s", charset.c_str());
}
}
return res;
}
示例2: snac_login
void ICQClient::snac_login(unsigned short type, unsigned short)
{
unsigned long newUin;
switch (type){
case ICQ_SNACxLOGIN_ERROR:
if (data.owner.Uin.value){
m_reconnect = NO_RECONNECT;
m_socket->error_state(I18N_NOOP("Login error"), AuthError);
break;
}
// in the process of registering;
// it seems that we need to request bot protection picture;
// reconnecting to send the request.
log(L_DEBUG, "Verification required, reconnecting");
m_bVerifying = true;
m_socket->close();
m_socket->connect(getServer(), getPort(), this);
break;
case ICQ_SNACxLOGIN_REGISTER:
if (data.owner.Uin.value){
m_socket->error_state(I18N_NOOP("Registered in no register state"));
break;
}
m_socket->readBuffer.incReadPos(0x2E);
m_socket->readBuffer.unpack(newUin);
log(L_DEBUG, "Register %lu %08lX", newUin, newUin);
setUin(newUin);
setState(Connecting);
m_socket->connect(getServer(), getPort(), this);
break;
case ICQ_SNACxLOGIN_AUTHxKEYxRESPONSE:
log(L_DEBUG, "Sending MD5 key");
if (data.owner.Screen.ptr || data.owner.Uin.value){
string md5_key;
m_socket->readBuffer.unpackStr(md5_key);
snac(ICQ_SNACxFAM_LOGIN, ICQ_SNACxLOGIN_MD5xLOGIN, false, false);
if (data.owner.Uin.value){
char uin[20];
sprintf(uin, "%lu", data.owner.Uin.value);
m_socket->writeBuffer.tlv(0x0001, uin);
}else{
m_socket->writeBuffer.tlv(0x0001, data.owner.Screen.ptr);
}
string md = md5_key;
md += getContacts()->fromUnicode(NULL, getPassword());
md += "AOL Instant Messenger (SM)";
md = md5(md.c_str());
m_socket->writeBuffer.tlv(0x0025, md.c_str(), md.length());
if (data.owner.Uin.value){
m_socket->writeBuffer.tlv(0x0003, "ICQ Inc. - Product of ICQ (TM).2003b.5.56.1.3916.85");
m_socket->writeBuffer.tlv(0x0016, 0x010A);
m_socket->writeBuffer.tlv(0x0017, 0x0002);
m_socket->writeBuffer.tlv(0x0018, 0x0038);
m_socket->writeBuffer.tlv(0x0019, 0x0001);
m_socket->writeBuffer.tlv(0x001A, 0x0F4C);
m_socket->writeBuffer.tlv(0x0014, 0x00000055L);
m_socket->writeBuffer.tlv(0x000f, "en");
m_socket->writeBuffer.tlv(0x000e, "us");
}else{
m_socket->writeBuffer.tlv(0x0003, "AOL Instant Messenger, version 5.1.3036/WIN32");
m_socket->writeBuffer.tlv(0x0016, (unsigned short)0x0109);
m_socket->writeBuffer.tlv(0x0017, (unsigned short)0x0005);
m_socket->writeBuffer.tlv(0x0018, (unsigned short)0x0001);
m_socket->writeBuffer.tlv(0x0019, (unsigned short)0x0000);
m_socket->writeBuffer.tlv(0x001A, (unsigned short)0x0BDC);
m_socket->writeBuffer.tlv(0x0014, 0x000000D2L);
m_socket->writeBuffer.tlv(0x000F, "en");
m_socket->writeBuffer.tlv(0x000E, "us");
m_socket->writeBuffer.tlv(0x004A, "\x01");
}
sendPacket(true);
}
break;
case ICQ_SNACxLOGIN_LOGINxREPLY:
chn_close();
break;
case ICQ_SNACxLOGIN_REGISTERxSEND_IMG: {
m_bVerifying = false;
TlvList tlv(m_socket->readBuffer);
// currently there are 2 TLVs in SNAC(17,0D):
// type = 1: the value contains the mime type of the image (image/jpeg); ignored
// type = 2: the value contains the image itself in the binary form
Tlv* tlvImage = tlv(2);
if (!tlvImage)
break;
log(L_DEBUG, "Image length: %d bytes", tlvImage->Size());
uchar* buf = new uchar[tlvImage->Size()];
memcpy(buf, *tlvImage, tlvImage->Size());
QPixmap pict;
if (!pict.loadFromData(buf, tlvImage->Size()))
{
delete[] buf;
break;
}
delete[] buf;
log(L_DEBUG, "Received verification image");
VerifyDlg verdlg(qApp->activeWindow(), pict);
if (verdlg.exec() == QDialog::Accepted) // what to do if the user has cancelled the dialog?
{
QString verifyStr = verdlg.getVerifyString();
//.........这里部分代码省略.........
示例3: snac_login
void ICQClient::snac_login(unsigned short type, unsigned short)
{
unsigned long newUin;
switch (type){
case ICQ_SNACxLOGIN_ERROR:
if (data.owner.Uin.toULong()){
m_reconnect = NO_RECONNECT;
socket()->error_state(I18N_NOOP("Login error"), AuthError);
break;
}
// in the process of registering;
// it seems that we need to request bot protection picture;
// reconnecting to send the request.
log(L_DEBUG, "Verification required, reconnecting");
m_bVerifying = true;
socket()->close();
socket()->connect(getServer(), getPort(), this);
break;
case ICQ_SNACxLOGIN_REGISTER:
if (data.owner.Uin.toULong()){
socket()->error_state(I18N_NOOP("Registered in no register state"));
break;
}
socket()->readBuffer().incReadPos(0x2E);
socket()->readBuffer().unpack(newUin);
log(L_DEBUG, "Register %lu %08lX", newUin, newUin);
setUin(newUin);
setState(Connecting);
socket()->connect(getServer(), getPort(), this);
break;
case ICQ_SNACxLOGIN_AUTHxKEYxRESPONSE:
log(L_DEBUG, "Sending MD5 key");
if (!data.owner.Screen.str().isEmpty() || data.owner.Uin.toULong()){
QCString md5_key;
socket()->readBuffer().unpackStr(md5_key);
snac(ICQ_SNACxFOOD_LOGIN, ICQ_SNACxLOGIN_MD5xLOGIN, false, false);
if (data.owner.Uin.toULong()){
char uin[20];
sprintf(uin, "%lu", data.owner.Uin.toULong());
socket()->writeBuffer().tlv(0x0001, uin);
}else{
socket()->writeBuffer().tlv(0x0001, data.owner.Screen.str());
}
QCString md = md5_key;
md += getContacts()->fromUnicode(NULL, getPassword());
md += "AOL Instant Messenger (SM)";
md = md5(md);
socket()->writeBuffer().tlv(0x0025, md.data(), md.size());
if (data.owner.Uin.toULong()){
socket()->writeBuffer().tlv(0x0003, "ICQBasic"); //ToDo: Should be updated anytime
socket()->writeBuffer().tlv(0x0016, 0x010A); // ID Number
socket()->writeBuffer().tlv(0x0017, 0x0014); // major
socket()->writeBuffer().tlv(0x0018, 0x0034); // minor
socket()->writeBuffer().tlv(0x0019, 0x0009);
socket()->writeBuffer().tlv(0x001A, 0x0c18);
socket()->writeBuffer().tlv(0x0014, 0x0000043dL);
socket()->writeBuffer().tlv(0x000f, "en");
socket()->writeBuffer().tlv(0x000e, "us");
}else{
socket()->writeBuffer().tlv(0x0003, "AOL Instant Messenger, version 5.1.3036/WIN32"); //ToDo: Should be updated anytime
socket()->writeBuffer().tlv(0x0016, (unsigned short)0x0109);
socket()->writeBuffer().tlv(0x0017, (unsigned short)0x0005);
socket()->writeBuffer().tlv(0x0018, (unsigned short)0x0001);
socket()->writeBuffer().tlv(0x0019, (unsigned short)0x0000);
socket()->writeBuffer().tlv(0x001A, (unsigned short)0x0BDC);
socket()->writeBuffer().tlv(0x0014, 0x000000D2L);
socket()->writeBuffer().tlv(0x000F, "en"); //Todo Send right language shortcut ;) same below
socket()->writeBuffer().tlv(0x000E, "us");
socket()->writeBuffer().tlv(0x004A, "\x01");
}
sendPacket(true);
}
break;
case ICQ_SNACxLOGIN_LOGINxREPLY:
chn_close();
break;
case ICQ_SNACxLOGIN_REGISTERxSEND_IMG: {
m_bVerifying = false;
TlvList tlv(socket()->readBuffer());
// currently there are 2 TLVs in SNAC(17,0D):
// type = 1: the value contains the mime type of the image (image/jpeg); ignored
// type = 2: the value contains the image itself in the binary form
Tlv* tlvImage = tlv(2);
if (!tlvImage)
break;
log(L_DEBUG, "Image length: %d bytes", tlvImage->Size());
QByteArray buf = tlvImage->byteArray();
QPixmap pict;
if (!pict.loadFromData(buf))
break;
log(L_DEBUG, "Received verification image");
VerifyDlg verdlg(qApp->activeWindow(), pict);
if (verdlg.exec() == QDialog::Accepted) // what to do if the user has cancelled the dialog?
{
QString verifyStr = verdlg.getVerifyString();
log(L_DEBUG, "User input: %s", verifyStr.latin1());
snac(ICQ_SNACxFOOD_LOGIN, ICQ_SNACxLOGIN_REGISTERxREQ);
ICQBuffer msg;
msg
<< 0x00000000L << 0x28000300L << 0x00000000L
//.........这里部分代码省略.........