a library to use GPRS like ethernet or wifi, which makes it possible to connect to the internet with your GPRS module

Dependencies:   BufferedSerial

Dependents:   ThinkSpeak_Test roam_v1 roam_v2 finalv3

Fork of GPRSInterface by wei zou

Committer:
lawliet
Date:
Thu Feb 27 07:25:20 2014 +0000
Revision:
4:1142bdd07989
Parent:
3:acf2ea413e72
Child:
9:38800611a613
version 1.2 (fix some errors)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lawliet 0:8ccbd963e74d 1 /*
lawliet 0:8ccbd963e74d 2 TCPSocketConnection.cpp
lawliet 0:8ccbd963e74d 3 2014 Copyright (c) Seeed Technology Inc. All right reserved.
lawliet 0:8ccbd963e74d 4
lawliet 0:8ccbd963e74d 5 Author:lawliet zou(lawliet.zou@gmail.com)
lawliet 0:8ccbd963e74d 6 2014-2-24
lawliet 0:8ccbd963e74d 7
lawliet 0:8ccbd963e74d 8 This library is free software; you can redistribute it and/or
lawliet 0:8ccbd963e74d 9 modify it under the terms of the GNU Lesser General Public
lawliet 0:8ccbd963e74d 10 License as published by the Free Software Foundation; either
lawliet 0:8ccbd963e74d 11 version 2.1 of the License, or (at your option) any later version.
lawliet 0:8ccbd963e74d 12
lawliet 0:8ccbd963e74d 13 This library is distributed in the hope that it will be useful,
lawliet 0:8ccbd963e74d 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
lawliet 0:8ccbd963e74d 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
lawliet 0:8ccbd963e74d 16 Lesser General Public License for more details.
lawliet 0:8ccbd963e74d 17
lawliet 0:8ccbd963e74d 18 You should have received a copy of the GNU Lesser General Public
lawliet 0:8ccbd963e74d 19 License along with this library; if not, write to the Free Software
lawliet 0:8ccbd963e74d 20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
lawliet 0:8ccbd963e74d 21 */
lawliet 0:8ccbd963e74d 22
lawliet 0:8ccbd963e74d 23 #include "TCPSocketConnection.h"
lawliet 0:8ccbd963e74d 24
lawliet 0:8ccbd963e74d 25 TCPSocketConnection::TCPSocketConnection()
lawliet 0:8ccbd963e74d 26 {
lawliet 0:8ccbd963e74d 27 }
lawliet 0:8ccbd963e74d 28
lawliet 0:8ccbd963e74d 29 int TCPSocketConnection::connect(const char* host, const int port)
lawliet 0:8ccbd963e74d 30 {
lawliet 0:8ccbd963e74d 31 if (_sock_fd < 0) {
lawliet 0:8ccbd963e74d 32 _sock_fd = gprs->new_socket();
lawliet 0:8ccbd963e74d 33 if (_sock_fd < 0) {
lawliet 0:8ccbd963e74d 34 return -1;
lawliet 0:8ccbd963e74d 35 }
lawliet 0:8ccbd963e74d 36 }
lawliet 0:8ccbd963e74d 37
lawliet 0:8ccbd963e74d 38 if (!gprs->connect(_sock_fd, TCP, host, port)) {
lawliet 0:8ccbd963e74d 39 return false;
lawliet 0:8ccbd963e74d 40 }
lawliet 0:8ccbd963e74d 41 return true;
lawliet 0:8ccbd963e74d 42 }
lawliet 0:8ccbd963e74d 43
lawliet 0:8ccbd963e74d 44 bool TCPSocketConnection::is_connected(void)
lawliet 0:8ccbd963e74d 45 {
lawliet 0:8ccbd963e74d 46 return gprs->is_connected(_sock_fd);
lawliet 0:8ccbd963e74d 47 }
lawliet 0:8ccbd963e74d 48
lawliet 0:8ccbd963e74d 49 int TCPSocketConnection::send(char* data, int length)
lawliet 0:8ccbd963e74d 50 {
lawliet 0:8ccbd963e74d 51 int size = gprs->wait_writeable(_sock_fd, length);
lawliet 0:8ccbd963e74d 52 if (size < 0) {
lawliet 0:8ccbd963e74d 53 return -1;
lawliet 0:8ccbd963e74d 54 }
lawliet 0:8ccbd963e74d 55 if (size > length) {
lawliet 0:8ccbd963e74d 56 size = length;
lawliet 0:8ccbd963e74d 57 }
lawliet 0:8ccbd963e74d 58 return gprs->send(_sock_fd, data, size);
lawliet 0:8ccbd963e74d 59 }
lawliet 0:8ccbd963e74d 60
lawliet 0:8ccbd963e74d 61 int TCPSocketConnection::send_all(char* data, int length)
lawliet 0:8ccbd963e74d 62 {
lawliet 0:8ccbd963e74d 63 return send(data,length);
lawliet 0:8ccbd963e74d 64 }
lawliet 0:8ccbd963e74d 65
lawliet 0:8ccbd963e74d 66 int TCPSocketConnection::receive(char* data, int length)
lawliet 0:8ccbd963e74d 67 {
lawliet 3:acf2ea413e72 68 #if 0
lawliet 0:8ccbd963e74d 69 if (size < 0) {
lawliet 0:8ccbd963e74d 70 return -1;
lawliet 0:8ccbd963e74d 71 }
lawliet 0:8ccbd963e74d 72 if(size == 0) {
lawliet 0:8ccbd963e74d 73 size = gprs->wait_readable(_sock_fd, DEFAULT_TIMEOUT);
lawliet 0:8ccbd963e74d 74 }
lawliet 0:8ccbd963e74d 75
lawliet 0:8ccbd963e74d 76 if(size > length) {
lawliet 0:8ccbd963e74d 77 size = size - length;
lawliet 0:8ccbd963e74d 78 } else {
lawliet 0:8ccbd963e74d 79 length = size;
lawliet 0:8ccbd963e74d 80 size = -1;
lawliet 0:8ccbd963e74d 81 }
lawliet 3:acf2ea413e72 82 #endif
lawliet 3:acf2ea413e72 83 int size = gprs->wait_readable(_sock_fd, DEFAULT_TIMEOUT);
lawliet 4:1142bdd07989 84 return gprs->recv(_sock_fd, data, size>length?length:size);
lawliet 0:8ccbd963e74d 85 }
lawliet 0:8ccbd963e74d 86
lawliet 0:8ccbd963e74d 87 int TCPSocketConnection::receive_all(char* data, int length)
lawliet 0:8ccbd963e74d 88 {
lawliet 0:8ccbd963e74d 89 return receive(data,length);
lawliet 0:8ccbd963e74d 90 }