/** Send a TPDU through whatever gateway is available. */ short_code_action submitSMS(const char *imsi, const TLSubmit& submit, const std::string &body, short_code_params *scp) { LOG(INFO) << "from " << imsi << " message: " << submit; const TLAddress& address = submit.DA(); // Check for direct e-mail address at start of message body. // FIXME -- This doesn't really follow the spec. See GSM 03.40 3.8. static const Regexp emailAddress("^[[:graph:]]+@[[:graph:]]+ "); if (emailAddress.match(body.data())) { // FIXME -- Get the sender's E.164 to put in the subject line. char bodyCopy[body.length()+2]; strcpy(bodyCopy,body.data()); char* SMTPAddress = bodyCopy; char* term = strchr(bodyCopy,' '); // If term's NULL, the regexp is broken. assert(term); *term = '\0'; char* SMTPPayload = term+1; LOG(INFO) << "sending SMTP to " << SMTPAddress << ": " << SMTPPayload; if (SMTPPayload) return sendEMail(SMTPAddress,SMTPPayload,"from OpenBTS gateway"); else return sendEMail(SMTPAddress,"(empty)","from OpenBTS gateway"); } // Send to smqueue or HTTP gateway, depending on what's defined in the config. if (gConfig.defines("SMS.HTTP.Gateway")) // If there is an external HTTP gateway, use it. return sendHTTP(address.digits(), body); else // Otherwise, we are looking for a SIP interface to smqueue. return sendSIP_init(imsi, submit, body, scp); }
/** Send a TPDU through whatever gateway is available. */ short_code_action submitSMS(const char *imsi, const TLSubmit& submit, const std::string &body, short_code_params *scp) { LOG(INFO) << "from " << imsi << " message: " << submit; const TLAddress& address = submit.DA(); //#if 0 //This is broken under Unbuntu becasue of changes in the "mail" program. // Check for direct e-mail address at start of message body. // FIXME -- This doesn't really follow the spec. See GSM 03.40 3.8. static const Regexp emailAddress("^[[:graph:]]+@[[:graph:]]+ "); if (emailAddress.match(body.data())) { char bodyCopy[body.length()+2]; strcpy(bodyCopy,body.data()); char* SMTPAddress = bodyCopy; char* term = strchr(bodyCopy,' '); // If term's NULL, the regexp emailAddress is broken. assert(term); *term = '\0'; char* SMTPPayload = term+1; // Get the sender's E.164 to put in the subject line. char* clid = scp->scp_smq->my_hlr.getCLIDLocal(imsi); char subjectLine[200]; if (!clid) sprintf(subjectLine,"from %s",imsi); else { sprintf(subjectLine,"from %s",clid); free(clid); } // Send it. LOG(INFO) << "sending SMTP to " << SMTPAddress << ": " << SMTPPayload; if (SMTPPayload) return sendEMail(SMTPAddress,SMTPPayload,subjectLine); else return sendEMail(SMTPAddress,"(empty)","from OpenBTS gateway"); } //#endif char* destinationNumber = scp->scp_smq->my_hlr.getIMSI2(address.digits()); // Send to smqueue or HTTP gateway, depending on what's defined in the config. // And whether of not we can resolve the destination, and a global relay does not exist, // AND the message is not to a shortcode. if (gConfig.getStr("SIP.GlobalRelay.IP").length() == 0 && gConfig.getStr("SMS.HTTPGateway.URL").length() != 0 && !destinationNumber) // If there is an external HTTP gateway, use it. return sendHTTP(address.digits(), body); free(destinationNumber); return sendSIP_init(imsi, submit, body, scp); }
int SPString::m(Regexp & r) { return r.match(*this); }