@@ -1300,7 +1300,7 @@ Adafruit_CC3000_Client Adafruit_CC3000::connectTCP(uint32_t destIP, uint16_t des
13001300
13011301 // printHex((byte *)&socketAddress, sizeof(socketAddress));
13021302 // if (CC3KPrinter != 0) CC3KPrinter->print(F("Connecting socket ... "));
1303- if (-1 == connect (tcp_socket, &socketAddress, sizeof (socketAddress)))
1303+ if (-1 == :: connect (tcp_socket, &socketAddress, sizeof (socketAddress)))
13041304 {
13051305 CHECK_PRINTER {
13061306 CC3KPrinter->println (F (" Connection error" ));
@@ -1350,7 +1350,7 @@ Adafruit_CC3000_Client Adafruit_CC3000::connectUDP(uint32_t destIP, uint16_t des
13501350 }
13511351
13521352 // printHex((byte *)&socketAddress, sizeof(socketAddress));
1353- if (-1 == connect (udp_socket, &socketAddress, sizeof (socketAddress)))
1353+ if (-1 == :: connect (udp_socket, &socketAddress, sizeof (socketAddress)))
13541354 {
13551355 CHECK_PRINTER {
13561356 CC3KPrinter->println (F (" Connection error" ));
@@ -1390,7 +1390,80 @@ void Adafruit_CC3000_Client::operator=(const Adafruit_CC3000_Client& other) {
13901390 memcpy (_rx_buf, other._rx_buf , RXBUFFERSIZE);
13911391}
13921392
1393- bool Adafruit_CC3000_Client::connected (void ) {
1393+ Adafruit_CC3000_Client::operator bool ()
1394+ {
1395+ return true ;
1396+ }
1397+
1398+ int Adafruit_CC3000_Client::connect (const char *host, uint16_t port){
1399+
1400+ // if (!_initialised) return 0;
1401+ // if (!ulCC3000Connected) return 0;
1402+ // if (!ulCC3000DHCP) return 0;
1403+
1404+ uint32_t ip = 0 ;
1405+
1406+ int16_t r = gethostbyname (host, strlen (host), &ip);
1407+
1408+ if (ip!=0 && r!=0 )
1409+ return connect (ip, port);
1410+ else
1411+ return 0 ;
1412+ }
1413+
1414+ int Adafruit_CC3000_Client::connect (IPAddress destIP, uint16_t destPort)
1415+ {
1416+ bufsiz = 0 ;
1417+ _rx_buf_idx = 0 ;
1418+ sockaddr socketAddress;
1419+ int32_t tcp_socket;
1420+
1421+ // Create the socket(s)
1422+ // if (CC3KPrinter != 0) CC3KPrinter->print(F("Creating socket ... "));
1423+ tcp_socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
1424+ if (-1 == tcp_socket)
1425+ {
1426+ CHECK_PRINTER {
1427+ CC3KPrinter->println (F (" Failed to open socket" ));
1428+ }
1429+ return 0 ;
1430+ }
1431+ // CC3KPrinter->print(F("DONE (socket ")); CC3KPrinter->print(tcp_socket); CC3KPrinter->println(F(")"));
1432+
1433+ // Try to open the socket
1434+ memset (&socketAddress, 0x00 , sizeof (socketAddress));
1435+ socketAddress.sa_family = AF_INET;
1436+ socketAddress.sa_data [0 ] = (destPort & 0xFF00 ) >> 8 ; // Set the Port Number
1437+ socketAddress.sa_data [1 ] = (destPort & 0x00FF );
1438+ socketAddress.sa_data [2 ] = destIP >> 24 ;
1439+ socketAddress.sa_data [3 ] = destIP >> 16 ;
1440+ socketAddress.sa_data [4 ] = destIP >> 8 ;
1441+ socketAddress.sa_data [5 ] = destIP;
1442+
1443+ CHECK_PRINTER {
1444+ CC3KPrinter->print (F (" \n\r Connect to " ));
1445+ CC3KPrinter->print (destIP);
1446+ CC3KPrinter->print (' :' );
1447+ CC3KPrinter->println (destPort);
1448+ }
1449+
1450+ // printHex((byte *)&socketAddress, sizeof(socketAddress));
1451+ // if (CC3KPrinter != 0) CC3KPrinter->print(F("Connecting socket ... "));
1452+ if (-1 == ::connect (tcp_socket, &socketAddress, sizeof (socketAddress)))
1453+ {
1454+ CHECK_PRINTER {
1455+ CC3KPrinter->println (F (" Connection error" ));
1456+ }
1457+ closesocket (tcp_socket);
1458+ return 0 ;
1459+ }
1460+ // if (CC3KPrinter != 0) CC3KPrinter->println(F("DONE"));
1461+
1462+ _socket = tcp_socket;
1463+ return 1 ;
1464+ }
1465+
1466+ uint8_t Adafruit_CC3000_Client::connected (void ) {
13941467 if (_socket < 0 ) return false ;
13951468
13961469 if (! available () && closed_sockets[_socket] == true ) {
@@ -1404,11 +1477,15 @@ bool Adafruit_CC3000_Client::connected(void) {
14041477 else return true ;
14051478}
14061479
1407- int16_t Adafruit_CC3000_Client::write (const void *buf, uint16_t len, uint32_t flags)
1480+ size_t Adafruit_CC3000_Client::write (const void *buf, uint16_t len, uint32_t flags)
14081481{
14091482 return send (_socket, buf, len, flags);
14101483}
14111484
1485+ size_t Adafruit_CC3000_Client::write (const uint8_t *buf, size_t len)
1486+ {
1487+ return write (buf, len, 0 );
1488+ }
14121489
14131490size_t Adafruit_CC3000_Client::write (uint8_t c)
14141491{
@@ -1492,19 +1569,28 @@ size_t Adafruit_CC3000_Client::fastrprintln(char *str) {
14921569 return r;
14931570}
14941571
1495- int16_t Adafruit_CC3000_Client::read (void *buf, uint16_t len, uint32_t flags)
1572+ int Adafruit_CC3000_Client::read (void *buf, uint16_t len, uint32_t flags)
14961573{
14971574 return recv (_socket, buf, len, flags);
14981575
14991576}
15001577
1578+ int Adafruit_CC3000_Client::read (uint8_t *buf, size_t len)
1579+ {
1580+ return read (buf, len, 0 );
1581+ }
1582+
15011583int32_t Adafruit_CC3000_Client::close (void ) {
15021584 int32_t x = closesocket (_socket);
15031585 _socket = -1 ;
15041586 return x;
15051587}
15061588
1507- uint8_t Adafruit_CC3000_Client::read (void )
1589+ void Adafruit_CC3000_Client::stop (){
1590+ close ();
1591+ }
1592+
1593+ int Adafruit_CC3000_Client::read (void )
15081594{
15091595 while ((bufsiz <= 0 ) || (bufsiz == _rx_buf_idx)) {
15101596 cc3k_int_poll ();
@@ -1523,7 +1609,7 @@ uint8_t Adafruit_CC3000_Client::read(void)
15231609 return ret;
15241610}
15251611
1526- uint8_t Adafruit_CC3000_Client::available (void ) {
1612+ int Adafruit_CC3000_Client::available (void ) {
15271613 // not open!
15281614 if (_socket < 0 ) return 0 ;
15291615
@@ -1548,6 +1634,28 @@ uint8_t Adafruit_CC3000_Client::available(void) {
15481634 else return 0 ; // no data is available
15491635}
15501636
1637+ void Adafruit_CC3000_Client::flush (){
1638+
1639+ }
1640+
1641+ int Adafruit_CC3000_Client::peek (){
1642+ while ((bufsiz <= 0 ) || (bufsiz == _rx_buf_idx)) {
1643+ cc3k_int_poll ();
1644+ // buffer in some more data
1645+ bufsiz = recv (_socket, _rx_buf, sizeof (_rx_buf), 0 );
1646+ if (bufsiz == -57 ) {
1647+ close ();
1648+ return 0 ;
1649+ }
1650+ // if (CC3KPrinter != 0) { CC3KPrinter->println("Read "); CC3KPrinter->print(bufsiz); CC3KPrinter->println(" bytes"); }
1651+ _rx_buf_idx = 0 ;
1652+ }
1653+ uint8_t ret = _rx_buf[_rx_buf_idx];
1654+
1655+ // if (CC3KPrinter != 0) { CC3KPrinter->print("("); CC3KPrinter->write(ret); CC3KPrinter->print(")"); }
1656+ return ret;
1657+ }
1658+
15511659void Adafruit_CC3000::setPrinter (Print* p) {
15521660 CC3KPrinter = p;
15531661}
0 commit comments