Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MTS-Cellular by
Cellular/EasyIP.cpp@28:f93d7b3f7c2e, 2014-07-01 (annotated)
- Committer:
- Vanger
- Date:
- Tue Jul 01 19:50:39 2014 +0000
- Revision:
- 28:f93d7b3f7c2e
- Parent:
- 27:ec44d5a9544f
- Child:
- 29:edc613ed3f2e
Made ping() more robust under EasyIP.; Tweaked disconnect() under EasyIP to be more reliable.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Vanger | 26:2b769ed8de4f | 1 | // This is a template from UIP.cpp for now, will modify code and implement it as I go |
Vanger | 26:2b769ed8de4f | 2 | |
Vanger | 26:2b769ed8de4f | 3 | |
Vanger | 26:2b769ed8de4f | 4 | |
Vanger | 26:2b769ed8de4f | 5 | #include "mbed.h" |
Vanger | 26:2b769ed8de4f | 6 | #include "EasyIP.h" |
Vanger | 26:2b769ed8de4f | 7 | #include "MTSText.h" |
Vanger | 26:2b769ed8de4f | 8 | #include "MTSLog.h" |
Vanger | 26:2b769ed8de4f | 9 | #include "CellUtils.h" |
Vanger | 26:2b769ed8de4f | 10 | |
Vanger | 26:2b769ed8de4f | 11 | |
Vanger | 26:2b769ed8de4f | 12 | |
Vanger | 26:2b769ed8de4f | 13 | using namespace mts; |
Vanger | 26:2b769ed8de4f | 14 | |
Vanger | 26:2b769ed8de4f | 15 | EasyIP::EasyIP(Radio type) |
Vanger | 26:2b769ed8de4f | 16 | { |
Vanger | 26:2b769ed8de4f | 17 | //Not sure how the construction process is done, |
Vanger | 26:2b769ed8de4f | 18 | //but assuming it works for both EasyIP and UIP the same way. |
Vanger | 26:2b769ed8de4f | 19 | this->type = type; |
Vanger | 26:2b769ed8de4f | 20 | io = NULL; |
Vanger | 26:2b769ed8de4f | 21 | dcd = NULL; |
Vanger | 26:2b769ed8de4f | 22 | dtr = NULL; |
Vanger | 26:2b769ed8de4f | 23 | resetLine = NULL; |
Vanger | 26:2b769ed8de4f | 24 | echoMode = true; |
Vanger | 26:2b769ed8de4f | 25 | pppConnected = false; |
Vanger | 26:2b769ed8de4f | 26 | socketMode = TCP; |
Vanger | 26:2b769ed8de4f | 27 | socketOpened = false; |
Vanger | 26:2b769ed8de4f | 28 | socketCloseable = true; |
Vanger | 26:2b769ed8de4f | 29 | local_port = 0; |
Vanger | 26:2b769ed8de4f | 30 | local_address = ""; |
Vanger | 26:2b769ed8de4f | 31 | host_port = 0; |
Vanger | 26:2b769ed8de4f | 32 | } |
Vanger | 26:2b769ed8de4f | 33 | |
Vanger | 26:2b769ed8de4f | 34 | EasyIP::~EasyIP() |
Vanger | 26:2b769ed8de4f | 35 | { |
Vanger | 26:2b769ed8de4f | 36 | //Same reasoning for the destructor as the constructor, |
Vanger | 26:2b769ed8de4f | 37 | //assuming it works for UIP, it will work for EasyIP |
Vanger | 26:2b769ed8de4f | 38 | if (dtr != NULL) { |
Vanger | 26:2b769ed8de4f | 39 | dtr->write(1); |
Vanger | 26:2b769ed8de4f | 40 | } |
Vanger | 26:2b769ed8de4f | 41 | |
Vanger | 26:2b769ed8de4f | 42 | delete dcd; |
Vanger | 26:2b769ed8de4f | 43 | delete dtr; |
Vanger | 26:2b769ed8de4f | 44 | delete resetLine; |
Vanger | 26:2b769ed8de4f | 45 | } |
Vanger | 26:2b769ed8de4f | 46 | |
Vanger | 26:2b769ed8de4f | 47 | //Initializes the MTS IO Buffer |
Vanger | 26:2b769ed8de4f | 48 | bool EasyIP::init(MTSBufferedIO* io) |
Vanger | 26:2b769ed8de4f | 49 | { |
Vanger | 26:2b769ed8de4f | 50 | if (! Cellular::init(io)) { |
Vanger | 26:2b769ed8de4f | 51 | return false; |
Vanger | 26:2b769ed8de4f | 52 | } |
Vanger | 26:2b769ed8de4f | 53 | |
Vanger | 26:2b769ed8de4f | 54 | logDebug("radio type: %s", Cellular::getRadioNames(type).c_str()); |
Vanger | 26:2b769ed8de4f | 55 | return true; |
Vanger | 26:2b769ed8de4f | 56 | } |
Vanger | 26:2b769ed8de4f | 57 | |
Vanger | 26:2b769ed8de4f | 58 | bool EasyIP::connect() |
Vanger | 26:2b769ed8de4f | 59 | { |
Vanger | 26:2b769ed8de4f | 60 | //Check if socket is open |
Vanger | 26:2b769ed8de4f | 61 | //flag stored in Cellular.h |
Vanger | 26:2b769ed8de4f | 62 | if(socketOpened) { |
Vanger | 26:2b769ed8de4f | 63 | return true; |
Vanger | 26:2b769ed8de4f | 64 | } |
Vanger | 26:2b769ed8de4f | 65 | |
Vanger | 26:2b769ed8de4f | 66 | //Check if already connected |
Vanger | 26:2b769ed8de4f | 67 | //by calling the function isConnected() in EasyIP.cpp |
Vanger | 26:2b769ed8de4f | 68 | if(isConnected()) { |
Vanger | 26:2b769ed8de4f | 69 | return true; |
Vanger | 26:2b769ed8de4f | 70 | } |
Vanger | 26:2b769ed8de4f | 71 | //Create an mbed timer object |
Vanger | 26:2b769ed8de4f | 72 | Timer tmr; |
Vanger | 26:2b769ed8de4f | 73 | |
Vanger | 26:2b769ed8de4f | 74 | //Check Registration: AT+CREG? == 0,1 |
Vanger | 26:2b769ed8de4f | 75 | //(Does the AT command inside Cellular class) |
Vanger | 26:2b769ed8de4f | 76 | tmr.start(); |
Vanger | 26:2b769ed8de4f | 77 | do { |
Vanger | 26:2b769ed8de4f | 78 | Registration registration = getRegistration(); |
Vanger | 26:2b769ed8de4f | 79 | if(registration != REGISTERED) { |
Vanger | 26:2b769ed8de4f | 80 | logTrace("Not Registered [%d] ... waiting", (int)registration); |
Vanger | 26:2b769ed8de4f | 81 | wait(1); |
Vanger | 26:2b769ed8de4f | 82 | } else { |
Vanger | 26:2b769ed8de4f | 83 | break; |
Vanger | 26:2b769ed8de4f | 84 | } |
Vanger | 26:2b769ed8de4f | 85 | } while(tmr.read() < 30); |
Vanger | 26:2b769ed8de4f | 86 | |
Vanger | 26:2b769ed8de4f | 87 | //Check RSSI: AT+CSQ |
Vanger | 26:2b769ed8de4f | 88 | //Does the command inside Cellular |
Vanger | 26:2b769ed8de4f | 89 | tmr.reset(); |
Vanger | 26:2b769ed8de4f | 90 | do { |
Vanger | 26:2b769ed8de4f | 91 | int rssi = getSignalStrength(); |
Vanger | 26:2b769ed8de4f | 92 | logDebug("Signal strength: %d", rssi); |
Vanger | 26:2b769ed8de4f | 93 | if(rssi == 99) { |
Vanger | 26:2b769ed8de4f | 94 | logTrace("No Signal ... waiting"); |
Vanger | 26:2b769ed8de4f | 95 | wait(1); |
Vanger | 26:2b769ed8de4f | 96 | } else { |
Vanger | 26:2b769ed8de4f | 97 | break; |
Vanger | 26:2b769ed8de4f | 98 | } |
Vanger | 26:2b769ed8de4f | 99 | } while(tmr.read() < 30); |
Vanger | 26:2b769ed8de4f | 100 | |
Vanger | 27:ec44d5a9544f | 101 | //Similar to AT#CONNECTIONSTART: Make a PPP connection |
Vanger | 26:2b769ed8de4f | 102 | if (type == MTSMC_H5 || type == MTSMC_G3) { |
Vanger | 26:2b769ed8de4f | 103 | logDebug("Making PPP Connection Attempt. APN[%s]", apn.c_str()); |
Vanger | 26:2b769ed8de4f | 104 | } else { |
Vanger | 26:2b769ed8de4f | 105 | logDebug("Making PPP Connection Attempt"); |
Vanger | 26:2b769ed8de4f | 106 | } |
Vanger | 26:2b769ed8de4f | 107 | //The main thing going on; Sends the AT command to start a connection |
Vanger | 26:2b769ed8de4f | 108 | //Assuming context is already stored in the modem...If not, will need to set context from classes/data |
Vanger | 26:2b769ed8de4f | 109 | std::string pppResult = sendCommand("AT#SGACT=1,1", 120000); |
Vanger | 26:2b769ed8de4f | 110 | |
Vanger | 26:2b769ed8de4f | 111 | if(pppResult.find("OK") != std::string::npos) { |
Vanger | 26:2b769ed8de4f | 112 | std::vector<std::string> parts = Text::split(pppResult, "\r\n"); |
Vanger | 26:2b769ed8de4f | 113 | if(parts.size() >= 2) { |
Vanger | 26:2b769ed8de4f | 114 | parts = Text::split(parts[1], " "); |
Vanger | 26:2b769ed8de4f | 115 | local_address = parts[1]; |
Vanger | 26:2b769ed8de4f | 116 | } |
Vanger | 26:2b769ed8de4f | 117 | logInfo("PPP Connection Established: IP[%s]", local_address.c_str()); |
Vanger | 26:2b769ed8de4f | 118 | pppConnected = true; |
Vanger | 26:2b769ed8de4f | 119 | |
Vanger | 26:2b769ed8de4f | 120 | } else { |
Vanger | 26:2b769ed8de4f | 121 | pppConnected = false; |
Vanger | 26:2b769ed8de4f | 122 | } |
Vanger | 26:2b769ed8de4f | 123 | |
Vanger | 26:2b769ed8de4f | 124 | return pppConnected; |
Vanger | 26:2b769ed8de4f | 125 | } |
Vanger | 26:2b769ed8de4f | 126 | |
Vanger | 26:2b769ed8de4f | 127 | void EasyIP::disconnect() |
Vanger | 26:2b769ed8de4f | 128 | { |
Vanger | 28:f93d7b3f7c2e | 129 | bool complete = false; |
Vanger | 28:f93d7b3f7c2e | 130 | Timer dctmr; |
Vanger | 26:2b769ed8de4f | 131 | //AT#SGACT=1,0: Close a PPP connection |
Vanger | 28:f93d7b3f7c2e | 132 | logDebug("Closing PPP Connection"); |
Vanger | 26:2b769ed8de4f | 133 | if(socketOpened) { |
Vanger | 26:2b769ed8de4f | 134 | close(); //Calls another EasyIP |
Vanger | 26:2b769ed8de4f | 135 | //function to close socket before disconnect |
Vanger | 26:2b769ed8de4f | 136 | } |
Vanger | 26:2b769ed8de4f | 137 | //Sends AT#SGACT=1,0 command |
Vanger | 28:f93d7b3f7c2e | 138 | dctmr.start(); |
Vanger | 28:f93d7b3f7c2e | 139 | do { |
Vanger | 28:f93d7b3f7c2e | 140 | if(sendBasicCommand("AT#SGACT=1,0", 10000) == MTS_SUCCESS) { |
Vanger | 28:f93d7b3f7c2e | 141 | complete = true; |
Vanger | 28:f93d7b3f7c2e | 142 | } else { |
Vanger | 28:f93d7b3f7c2e | 143 | wait(0.050); |
Vanger | 28:f93d7b3f7c2e | 144 | } |
Vanger | 28:f93d7b3f7c2e | 145 | } while((!complete) && (dctmr.read() < 5)); |
Vanger | 28:f93d7b3f7c2e | 146 | logDebug("Successfully closed PPP Connection"); |
Vanger | 28:f93d7b3f7c2e | 147 | pppConnected = false; //Cell will drop connection if we go silent |
Vanger | 26:2b769ed8de4f | 148 | } |
Vanger | 27:ec44d5a9544f | 149 | |
Vanger | 26:2b769ed8de4f | 150 | bool EasyIP::isConnected() |
Vanger | 26:2b769ed8de4f | 151 | { |
Vanger | 26:2b769ed8de4f | 152 | |
Vanger | 27:ec44d5a9544f | 153 | |
Vanger | 27:ec44d5a9544f | 154 | |
Vanger | 26:2b769ed8de4f | 155 | return pppConnected; |
Vanger | 26:2b769ed8de4f | 156 | } |
Vanger | 26:2b769ed8de4f | 157 | //Binds the socket to a specific port if able |
Vanger | 26:2b769ed8de4f | 158 | bool EasyIP::bind(unsigned int port) |
Vanger | 26:2b769ed8de4f | 159 | { |
Vanger | 26:2b769ed8de4f | 160 | |
Vanger | 26:2b769ed8de4f | 161 | |
Vanger | 26:2b769ed8de4f | 162 | return true; |
Vanger | 26:2b769ed8de4f | 163 | } |
Vanger | 27:ec44d5a9544f | 164 | |
Vanger | 26:2b769ed8de4f | 165 | bool EasyIP::open(const std::string& address, unsigned int port, Mode mode) |
Vanger | 26:2b769ed8de4f | 166 | { |
Vanger | 26:2b769ed8de4f | 167 | |
Vanger | 26:2b769ed8de4f | 168 | return socketOpened; |
Vanger | 26:2b769ed8de4f | 169 | } |
Vanger | 27:ec44d5a9544f | 170 | |
Vanger | 26:2b769ed8de4f | 171 | bool EasyIP::isOpen() |
Vanger | 26:2b769ed8de4f | 172 | { |
Vanger | 26:2b769ed8de4f | 173 | |
Vanger | 26:2b769ed8de4f | 174 | return socketOpened; |
Vanger | 26:2b769ed8de4f | 175 | } |
Vanger | 27:ec44d5a9544f | 176 | |
Vanger | 26:2b769ed8de4f | 177 | bool EasyIP::close() |
Vanger | 26:2b769ed8de4f | 178 | { |
Vanger | 26:2b769ed8de4f | 179 | |
Vanger | 26:2b769ed8de4f | 180 | return true; |
Vanger | 26:2b769ed8de4f | 181 | } |
Vanger | 26:2b769ed8de4f | 182 | |
Vanger | 26:2b769ed8de4f | 183 | int EasyIP::read(char* data, int max, int timeout) |
Vanger | 26:2b769ed8de4f | 184 | { |
Vanger | 26:2b769ed8de4f | 185 | |
Vanger | 26:2b769ed8de4f | 186 | return 1; |
Vanger | 26:2b769ed8de4f | 187 | } |
Vanger | 26:2b769ed8de4f | 188 | |
Vanger | 26:2b769ed8de4f | 189 | int EasyIP::write(const char* data, int length, int timeout) |
Vanger | 26:2b769ed8de4f | 190 | { |
Vanger | 26:2b769ed8de4f | 191 | |
Vanger | 26:2b769ed8de4f | 192 | return 1; |
Vanger | 26:2b769ed8de4f | 193 | } |
Vanger | 26:2b769ed8de4f | 194 | |
Vanger | 26:2b769ed8de4f | 195 | unsigned int EasyIP::readable() |
Vanger | 26:2b769ed8de4f | 196 | { |
Vanger | 26:2b769ed8de4f | 197 | |
Vanger | 26:2b769ed8de4f | 198 | return io->readable(); |
Vanger | 26:2b769ed8de4f | 199 | } |
Vanger | 26:2b769ed8de4f | 200 | |
Vanger | 26:2b769ed8de4f | 201 | unsigned int EasyIP::writeable() |
Vanger | 26:2b769ed8de4f | 202 | { |
Vanger | 26:2b769ed8de4f | 203 | |
Vanger | 26:2b769ed8de4f | 204 | |
Vanger | 26:2b769ed8de4f | 205 | return io->writeable(); |
Vanger | 26:2b769ed8de4f | 206 | } |
Vanger | 26:2b769ed8de4f | 207 | |
Vanger | 26:2b769ed8de4f | 208 | bool EasyIP::setDeviceIP(std::string address) |
Vanger | 26:2b769ed8de4f | 209 | { |
Vanger | 26:2b769ed8de4f | 210 | if (address.compare("DHCP") == 0) { |
Vanger | 26:2b769ed8de4f | 211 | return true; |
Vanger | 26:2b769ed8de4f | 212 | } else { |
Vanger | 26:2b769ed8de4f | 213 | logWarning("Radio does not support static IPs, using DHCP.\n\r"); |
Vanger | 26:2b769ed8de4f | 214 | return false; |
Vanger | 26:2b769ed8de4f | 215 | } |
Vanger | 26:2b769ed8de4f | 216 | } |
Vanger | 26:2b769ed8de4f | 217 | |
Vanger | 26:2b769ed8de4f | 218 | Code EasyIP::setApn(const std::string& apn) |
Vanger | 26:2b769ed8de4f | 219 | { |
Vanger | 26:2b769ed8de4f | 220 | if (type == MTSMC_H5 || type == MTSMC_G3) { |
Vanger | 26:2b769ed8de4f | 221 | //Set IP,PPP,IPv6 |
Vanger | 26:2b769ed8de4f | 222 | Code code = sendBasicCommand("AT+CGDCONT=1,PPP," + apn, 1000); |
Vanger | 26:2b769ed8de4f | 223 | if (code != MTS_SUCCESS) { |
Vanger | 26:2b769ed8de4f | 224 | return code; |
Vanger | 26:2b769ed8de4f | 225 | } |
Vanger | 26:2b769ed8de4f | 226 | this->apn = apn; |
Vanger | 26:2b769ed8de4f | 227 | return code; //This will return MTS_SUCCESS |
Vanger | 26:2b769ed8de4f | 228 | } else { |
Vanger | 26:2b769ed8de4f | 229 | logInfo("CDMA radios don't need an APN"); |
Vanger | 26:2b769ed8de4f | 230 | return MTS_SUCCESS; |
Vanger | 26:2b769ed8de4f | 231 | } |
Vanger | 26:2b769ed8de4f | 232 | } |
Vanger | 27:ec44d5a9544f | 233 | |
Vanger | 26:2b769ed8de4f | 234 | void EasyIP::reset() |
Vanger | 26:2b769ed8de4f | 235 | { |
Vanger | 26:2b769ed8de4f | 236 | } |
Vanger | 26:2b769ed8de4f | 237 | |
Vanger | 26:2b769ed8de4f | 238 | std::string EasyIP::getDeviceIP() |
Vanger | 26:2b769ed8de4f | 239 | { |
Vanger | 26:2b769ed8de4f | 240 | return local_address; |
Vanger | 26:2b769ed8de4f | 241 | } |
Vanger | 26:2b769ed8de4f | 242 | |
Vanger | 26:2b769ed8de4f | 243 | //Turns off echo when it receives a 1, turns on when it receives anything else |
Vanger | 26:2b769ed8de4f | 244 | Code EasyIP::echo(bool state) |
Vanger | 26:2b769ed8de4f | 245 | { |
Vanger | 27:ec44d5a9544f | 246 | Code code; |
Vanger | 27:ec44d5a9544f | 247 | if (state) { |
Vanger | 27:ec44d5a9544f | 248 | code = sendBasicCommand("ATE0", 1000); |
Vanger | 27:ec44d5a9544f | 249 | echoMode = (code == MTS_SUCCESS) ? false : echoMode; |
Vanger | 27:ec44d5a9544f | 250 | } else { |
Vanger | 27:ec44d5a9544f | 251 | code = sendBasicCommand("ATE1", 1000); |
Vanger | 27:ec44d5a9544f | 252 | echoMode = (code == MTS_SUCCESS) ? true : echoMode; |
Vanger | 27:ec44d5a9544f | 253 | } |
Vanger | 27:ec44d5a9544f | 254 | return code; |
Vanger | 26:2b769ed8de4f | 255 | } |
Vanger | 26:2b769ed8de4f | 256 | |
Vanger | 26:2b769ed8de4f | 257 | bool EasyIP::ping(const std::string& address) |
Vanger | 26:2b769ed8de4f | 258 | { |
Vanger | 26:2b769ed8de4f | 259 | char buffer[256] = {0}; |
Vanger | 27:ec44d5a9544f | 260 | std::vector<std::string> parts; |
Vanger | 27:ec44d5a9544f | 261 | int pingsRec=0; |
Vanger | 27:ec44d5a9544f | 262 | int TTL=0; |
Vanger | 27:ec44d5a9544f | 263 | int Timeout=0; |
Vanger | 27:ec44d5a9544f | 264 | |
Vanger | 27:ec44d5a9544f | 265 | //Format parameters for sending to radio |
Vanger | 28:f93d7b3f7c2e | 266 | sprintf(buffer, "AT#PING=%s,1,32,%d", address.c_str(), (5*PINGDELAY)); |
Vanger | 26:2b769ed8de4f | 267 | |
Vanger | 27:ec44d5a9544f | 268 | for(int pngs=0; pngs<PINGNUM; pngs++) { |
Vanger | 28:f93d7b3f7c2e | 269 | std::string response = sendCommand(buffer, (PINGDELAY*1000)); //Send 1 ping |
Vanger | 28:f93d7b3f7c2e | 270 | //printf("Response [%s]\n", response.c_str()); //remove |
Vanger | 28:f93d7b3f7c2e | 271 | if(response.empty()) { |
Vanger | 28:f93d7b3f7c2e | 272 | //printf("Response empty!\n"); //remove |
Vanger | 28:f93d7b3f7c2e | 273 | continue; //Skip current loop if send command fails |
Vanger | 28:f93d7b3f7c2e | 274 | } |
Vanger | 28:f93d7b3f7c2e | 275 | if(response.find("ERROR") != std::string::npos) { |
Vanger | 28:f93d7b3f7c2e | 276 | //printf("ERROR found\n"); //remove |
Vanger | 28:f93d7b3f7c2e | 277 | continue; //Skip current loop if send command fails |
Vanger | 28:f93d7b3f7c2e | 278 | } |
Vanger | 27:ec44d5a9544f | 279 | parts = Text::split(response, "\r\n"); |
Vanger | 28:f93d7b3f7c2e | 280 | if(parts.size() < 2) { |
Vanger | 28:f93d7b3f7c2e | 281 | //printf("Response newline-split size %d\n", parts.size()); //remove |
Vanger | 28:f93d7b3f7c2e | 282 | continue; |
Vanger | 28:f93d7b3f7c2e | 283 | } |
Vanger | 27:ec44d5a9544f | 284 | parts = Text::split(parts[1], ","); |
Vanger | 28:f93d7b3f7c2e | 285 | if(parts.size() < 4) { |
Vanger | 28:f93d7b3f7c2e | 286 | //printf("Response comma-split size %d\n", parts.size()); //remove |
Vanger | 28:f93d7b3f7c2e | 287 | continue; |
Vanger | 28:f93d7b3f7c2e | 288 | } |
Vanger | 27:ec44d5a9544f | 289 | //Parse TTL and Timeout values |
Vanger | 27:ec44d5a9544f | 290 | Timeout = std::atoi(parts[2].c_str()); |
Vanger | 27:ec44d5a9544f | 291 | TTL = std::atoi(parts[3].c_str()); |
Vanger | 27:ec44d5a9544f | 292 | |
Vanger | 27:ec44d5a9544f | 293 | if((Timeout < 600) && (TTL < 255)) { |
Vanger | 27:ec44d5a9544f | 294 | pingsRec++; |
Vanger | 27:ec44d5a9544f | 295 | } |
Vanger | 27:ec44d5a9544f | 296 | } //Success if less than 50% packet loss |
Vanger | 27:ec44d5a9544f | 297 | if( ((pingsRec/PINGNUM)>= 0.5) ) { |
Vanger | 27:ec44d5a9544f | 298 | return true; |
Vanger | 27:ec44d5a9544f | 299 | } |
Vanger | 26:2b769ed8de4f | 300 | return false; |
Vanger | 26:2b769ed8de4f | 301 | } |
Vanger | 26:2b769ed8de4f | 302 | |
Vanger | 27:ec44d5a9544f | 303 | //Pass 1 to enable socket closeable |
Vanger | 27:ec44d5a9544f | 304 | //Pass 0 to disable socket closeable |
Vanger | 26:2b769ed8de4f | 305 | Code EasyIP::setSocketCloseable(bool enabled) |
Vanger | 26:2b769ed8de4f | 306 | { |
Vanger | 27:ec44d5a9544f | 307 | |
Vanger | 26:2b769ed8de4f | 308 | return MTS_SUCCESS; |
Vanger | 26:2b769ed8de4f | 309 | } |