diff options
| author | 2008-09-28 13:29:37 +0000 | |
|---|---|---|
| committer | 2008-09-28 13:29:37 +0000 | |
| commit | 38e871bcfa4511748fe66c05f4491b304cde0580 (patch) | |
| tree | 52a823b9c4d1d51a68d41e470f80b6887d44c562 /src/modules/objects/class_socket.cpp | |
| parent | added doxygen comments; (diff) | |
| download | KVIrc-38e871bcfa4511748fe66c05f4491b304cde0580.tar.gz KVIrc-38e871bcfa4511748fe66c05f4491b304cde0580.tar.bz2 KVIrc-38e871bcfa4511748fe66c05f4491b304cde0580.zip | |
some fixes + optimized readhex functions in kvs classes socket and file
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@2587 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/objects/class_socket.cpp')
| -rw-r--r-- | src/modules/objects/class_socket.cpp | 73 |
1 files changed, 38 insertions, 35 deletions
diff --git a/src/modules/objects/class_socket.cpp b/src/modules/objects/class_socket.cpp index 5f3856f58..bc572d388 100644 --- a/src/modules/objects/class_socket.cpp +++ b/src/modules/objects/class_socket.cpp @@ -330,6 +330,8 @@ KVSO_END_CONSTRUCTOR(KviKvsObject_socket) KVSO_BEGIN_DESTRUCTOR(KviKvsObject_socket) delete m_pOutBuffer; delete m_pFlushTimer; + m_pOutBuffer=0; + m_pFlushTimer=0; if(m_pInBuffer)kvi_free(m_pInBuffer); if(m_pDelayTimer)delete m_pDelayTimer; @@ -349,6 +351,7 @@ bool KviKvsObject_socket::functionStatus(KviKvsObjectFunctionCall *c) bool KviKvsObject_socket::functionClose(KviKvsObjectFunctionCall *c) { + if (!m_pOutBuffer) return true; if((m_pOutBuffer->size() != 0) && (m_iStatus == KVI_SCRIPT_SOCKET_STATUS_CONNECTED)) tryFlush(); @@ -449,39 +452,36 @@ bool KviKvsObject_socket::functionWriteHex(KviKvsObjectFunctionCall *c) KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("hex_string",KVS_PT_STRING,0,m_szHex) KVSO_PARAMETERS_END(c) - - if(m_szHex.length() > 0) + if (m_szHex.length()%2) { - bool bOk; - QString szTmp; - szTmp=m_szHex.setNum(m_szHex.toInt(&bOk,16),16); - if(szTmp.length()>0) - { - KviQCString szData8 = szTmp.toUtf8(); - m_pOutBuffer->append((const unsigned char *)(szData8.data()),szData8.length()); - delayedFlush(0); - c->returnValue()->setInteger(szData8.length()); - } + c->warning(__tr2qs("Lenght of hex string is not multiple 2")); + return true; } - - /* - if(pszData) + unsigned char byte,lsb,msb; + char * buff = new char[(m_szHex.length()/2) + 1]; + int index=0; + m_szHex.toUpper(); + for(int i=0;i<m_szHex.length();i+=2) { - if(pszData->len() > 0) + msb=m_szHex.at(i).toAscii(); + lsb=m_szHex.at(i+1).toAscii(); + if (((msb>='A' && msb<='F')||(msb>='0' && msb<='9')) && ((lsb>='A' && lsb<='F')|| (lsb>='0' && lsb<='9'))) { - char * ptr; - len = pszData->hexToBuffer(&ptr); - if(len > 0) - { - m_pOutBuffer->append((const unsigned char *)(ptr),len); - delayedFlush(0); - KviStr::freeBuffer(ptr); - } + msb>='A'?msb-='7':msb-='0'; + lsb>='A'?lsb-='7':lsb-='0'; } + else{ + c->warning("The hex string is not correct!"); + return true; + } + byte=(msb*16)+lsb; + buff[index++]=byte; } - buffer.append(KviStr::Format,"%d",len); -*/ - return true; + m_pOutBuffer->append((const unsigned char *)buff,m_szHex.length()/2); + delayedFlush(0); + c->returnValue()->setInteger(index); + delete buff; + return true; } @@ -1212,17 +1212,20 @@ bool KviKvsObject_socket::functionRead(KviKvsObjectFunctionCall *c) bool KviKvsObject_socket::functionReadHex(KviKvsObjectFunctionCall *c) { - //??? funzioner� + unsigned char hex[]="000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C6C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5F6F7F8F9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF"; unsigned int uLen = readGetLength(c); - bool bOk; - if(uLen > 0) + char * str = new char[(uLen*2) + 1]; + int index=0; + for (int i=0;i<uLen;i++) { - QString szTmp; - szTmp =m_pInBuffer; - szTmp.toInt(&bOk,16); - c->returnValue()->setString(szTmp); - eatInData(uLen); + unsigned int byte=(unsigned char)m_pInBuffer[i]*2; + str[index++]=hex[byte++]; + str[index++]=hex[byte]; } + str[index]='\0'; + c->returnValue()->setString(str); + eatInData(uLen); + delete str; return true; } |
