aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects/class_socket.cpp
diff options
context:
space:
mode:
authorGravatar Noldor2008-09-28 13:29:37 +0000
committerGravatar Noldor2008-09-28 13:29:37 +0000
commit38e871bcfa4511748fe66c05f4491b304cde0580 (patch)
tree52a823b9c4d1d51a68d41e470f80b6887d44c562 /src/modules/objects/class_socket.cpp
parentadded doxygen comments; (diff)
downloadKVIrc-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.cpp73
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;
}