Forum Discussion
Diego_19194
Jul 26, 2007Nimbostratus
My rule:
when CLIENT_ACCEPTED {
snatpool snat-Pool-to-Mobile
set chelo ""
set cfrom ""
set crcpt ""
TCP::respond "220\r\n"
log local0. "client accepted"
TCP::collect
}
when CLIENT_DATA {
set cdata [TCP::payload]
set find {(54)(9)([0-9]*)(/TYPE)}
if { [ string length $cdata ] <= 0 } {
return
}
if { not ( $cdata contains "\r\n" ) } {
log local0. "get <$cdata> so far"
return
}
if { $cdata starts_with "HELO" } {
set chelo [TCP::payload]
log local0. "get helo <$cdata>"
TCP::respond "250 OK\r\n"
TCP::payload replace 0 [string length $chelo] ""
return
}
if { $cdata starts_with "MAIL FROM:" } {
set cfrom [TCP::payload]
log local0. "get from <$cfrom>"
TCP::respond "250 OK\r\n"
regsub -all "(+54)(9)(.*)(/TYPE)" $cfrom "\\1\\3\\4" cfrom
TCP::payload replace 0 [string length $cfrom] $cfrom
TCP::payload replace 0 [string length $cfrom] ""
log local0. "despues de cambiar <$cfrom>"
return
}
if { $cdata starts_with "RCPT TO:" } {
set crcpt "$crcpt[TCP::payload]"
log local0. "get rcpt <$crcpt>"
TCP::respond "250 OK\r\n"
regsub -all "(+54)(9)(.*)(/TYPE)" $cfrom "\\1\\3\\4" cfrom
TCP::payload replace 0 [string length [TCP::payload]] ""
TCP::payload replace 0 [string length [TCP::payload]] ""
log local0. "despues de cambiar <$crcpt>"
return
}
if { $cdata starts_with "DATA" } {
log local0. "get data <$cdata>"
TCP::payload replace 0 0 $chelo$cfrom$crcpt
}
if { [regexp $find $cdata] > 0} {
regsub -all $find $cdata "\\1\\3\\4" cdata
TCP::payload replace 0 [string length $cdata] "$cdata"
}
log local0. "payload client [TCP::payload]"
TCP::release
TCP::collect
}
when SERVER_CONNECTED {
snatpool snat-Pool-to-Mobile
log "server connected"
TCP::collect
}
when SERVER_DATA {
set sdata [TCP::payload]
set digit_nine "9"
set find {(54)([0-9]*)(/TYPE)}
if { $sdata starts_with "220" } {
log local0. "get data <$sdata>"
TCP::payload replace 0 [string length $sdata] ""
return
}
if { $sdata contains "\r\n354 " } {
log local0. "get data <$sdata>"
TCP::payload replace 0 [string length $sdata] "354\r\n"
}
if { [ string length $sdata ] <= 0 } {
return
}
if { [regexp $find $sdata] > 0} {
regsub -all $find $sdata "\\1$digit_nine\\2\\3" sdata
TCP::payload replace 0 [string length $sdata] "$sdata"
}
log local0. "payload server <[TCP::payload]>"
TCP::release
TCP::collect
}
when CLIENT_CLOSED {
log local0. "client closed"
}
It is a SMTP connection and send a MSISDN as "MAIL From:<+5491150027236/TYPE=PLMN@mm4.mms.movil.com>"
My version is 9.1