Hi all,

I try to get some response from 2 servers through ssl connection and i wrote
the following code. I have to call this routine twice and it works fine at
the first time, but if i try to call this routine again to connect to
another server, it fails at SslRead and returns sslErrNotImplemented even I
don't set any socket options. I can use SslWrite to send data to the server,
but can not get response from the server. Any ideas?

Err QueryServerInfo(CString strServer, CString strSend, CString& strRet)
{
 Err err = errNone;
 UInt16 nLibRef = 0;

 err = SysLibLoad(kSslLibType, kSslLibCreator, &nLibRef);
 if (err) {
  // error handler
 }

 err = SslLibOpen(nLibRef);

 if (err) {
  // error handler
 }

 SslLib* pCtxTmp = NULL;

 err = SslLibCreate(nLibRef, &pCtxTmp);

 if (err) {
  // error handler
 }

 SslContext* pCtx = NULL;

 err = SslContextCreate(nLibRef, pCtxTmp, &pCtx);

 if (err) {
  // error handler
 }

 NetSocketRef nRef = 0;
 err = OpenSSLSocket(strServer, &nRef);

 if (err) {
  // error handler
 }

 err = SslContextSet_Socket(nLibRef, pCtx, nRef);
 if (err) {
  // error handler
 }

 SslCallback verifyCallback;
 verifyCallback.callback = VerifyCallback;

 SslContextSet_VerifyCallback(nLibRef, pCtx, &verifyCallback);

 err = SslOpen(nLibRef, pCtx, sslOpenModeSsl|sslOpenUseDefaultTimeout, 0);
 if (err) {
  // error handler
 }

 UInt16 nSend = 0;
 UInt16 nRead = 0;

 nSend = SslWrite(nLibRef, pCtx, strSend.GetBuffer(), strSend.GetLength(),
&err);
 if (err) {
  // error handler
 }

 char pszGet[2000];
 nRead = SslRead(nLibRef, pCtx, pszGet, 2000, &err);

 if (err) {
  // error handler
 }

 strRet = pszGet;

 err = SslClose(nLibRef, pCtx, sslCloseUseDefaultTimeout, 0);

 if (err) {
  // error handler
 }
 err = SslContextDestroy(nLibRef, pCtx);

 if (err) {
  // error handler
 }
 err = SslLibDestroy(nLibRef, pCtxTmp);

 if (err) {
  // error handler
 }
 err = SslLibClose(nLibRef);

 if (err) {
  // error handler
 }

 err = SysLibRemove(nLibRef);
 if (err) {
  // error handler
 }

 if (NetLibSocketClose(g_nNetLibRef, nRef, DEFAULT_NET_LIB_TIME_OUT, &err)
== -1) {

  // error handler
 }

 return err;
}



-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/

Reply via email to