but my converted code fails on the handshake with "No supported cipher suites have been found."
my code is:
Code: Select all
ImportC "/usr/lib/libgnutls.so"
gnutls_global_init ()
gnutls_anon_allocate_client_credentials (*cred);pass pointer
gnutls_certificate_allocate_credentials (*cred)
gnutls_certificate_set_x509_trust_file (xcred, CAFILE.s, type)
gnutls_init (*session, type);type is client/server (?). pass pointer to a long
gnutls_set_default_priority (session)
gnutls_kx_set_priority (session, kx_priority)
gnutls_credentials_set (session, int, cred)
gnutls_transport_set_ptr (session, sd)
gnutls_handshake (session)
gnutls_perror (retcode)
gnutls_strerror(retcode)
gnutls_record_send (session, *buffer, bufferlen)
gnutls_record_recv (session, *buffer, *buffsize)
gnutls_bye (session, how)
gnutls_deinit (session)
gnutls_anon_free_client_credentials (anoncred)
gnutls_certificate_free_credentials (cred)
gnutls_global_deinit ()
EndImport
#GNUTLS_KX_ANON_DH = 4
#GNUTLS_CLIENT = 2
#GNUTLS_CRD_ANON = 2
#GNUTLS_SHUT_RDWR = 0
#GNUTLS_CRD_CERTIFICATE = 1
#GNUTLS_X509_FMT_PEM = 2
;program start
InitNetwork()
gnutls_global_init()
xcred.l
gnutls_certificate_allocate_credentials (@xcred)
CAFILE.s = "ca.pem"
gnutls_certificate_set_x509_trust_file (xcred, CAFILE, #GNUTLS_X509_FMT_PEM)
session.l
gnutls_init (@session, #GNUTLS_CLIENT)
gnutls_set_default_priority (session)
gnutls_credentials_set (session, #GNUTLS_CRD_CERTIFICATE, xcred)
connection = OpenNetworkConnection("sourceforge.net", 443)
gnutls_transport_set_ptr (session, ConnectionID(connection))
ret = gnutls_handshake (session)
If ret < 0
Debug "*** Handshake failed"
Debug PeekS(gnutls_strerror(ret))
Goto finish
Else
Debug "- Handshake was completed"
EndIf
MSG.s = "GET / HTTP/1.0"+#CRLF$+"HOST: sourceforge.net"+#CRLF$+#CRLF$
gnutls_record_send (session, @MSG, Len (MSG));
*buffer = AllocateMemory(1024)
ret = gnutls_record_recv (session, *buffer, 1024)
If ret = 0
Debug "- Peer has closed the TLS connection"
Goto finish;
ElseIf ret < 0
Debug "*** Error: "+PeekS(gnutls_strerror(ret))
Goto finish
EndIf
Debug "- Received "+Str(ret)+" bytes: "
Debug PeekS(*buffer)
FreeMemory(*buffer)
gnutls_bye (session, #GNUTLS_SHUT_RDWR)
finish:
CloseNetworkConnection(connection)
gnutls_deinit (session);
gnutls_certificate_free_credentials (xcred)
gnutls_global_deinit ();
EDIT: fixed code, now working properly
also edited to add host header so sf.net would respond with a page rather than a redirect.

