Method: Smpp::Base#process_pdu
- Defined in:
- lib/smpp/base.rb
#process_pdu(pdu) ⇒ Object
process common PDUs returns true if no further processing necessary
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/smpp/base.rb', line 137 def process_pdu(pdu) case pdu when Pdu::EnquireLinkResponse # nop when Pdu::EnquireLink write_pdu(Pdu::EnquireLinkResponse.new(pdu.sequence_number)) when Pdu::Unbind @state = :unbound write_pdu(Pdu::UnbindResponse.new(pdu.sequence_number, Pdu::Base::ESME_ROK)) close_connection when Pdu::UnbindResponse logger.info "Unbound OK. Closing connection." close_connection when Pdu::GenericNack logger.warn "Received NACK! (error code #{pdu.error_code})." # we don't take this lightly: close the connection close_connection when Pdu::DeliverSm logger.debug "ESM CLASS #{pdu.esm_class}" if pdu.esm_class != 4 # MO message begin if @delegate.respond_to?(:mo_received) @delegate.mo_received(self, pdu) end write_pdu(Pdu::DeliverSmResponse.new(pdu.sequence_number)) rescue => e logger.warn "Send Receiver Temporary App Error due to #{e.inspect} raised in delegate" write_pdu(Pdu::DeliverSmResponse.new(pdu.sequence_number, Pdu::Base::ESME_RX_T_APPN)) end else # Delivery report if @delegate.respond_to?(:delivery_report_received) @delegate.delivery_report_received(self, pdu) end end when Pdu::BindTransceiverResponse case pdu.command_status when Pdu::Base::ESME_ROK logger.debug "Bound OK." @state = :bound if @delegate.respond_to?(:bound) @delegate.bound(self) end when Pdu::Base::ESME_RINVPASWD logger.warn "Invalid password." # scheduele the connection to close, which eventually will cause the unbound() delegate # method to be invoked. close_connection when Pdu::Base::ESME_RINVSYSID logger.warn "Invalid system id." close_connection else logger.warn "Unexpected BindTransceiverResponse. Command status: #{pdu.command_status}" close_connection end when Pdu::SubmitSmResponse = @ack_ids.delete(pdu.sequence_number) if ! raise "Got SubmitSmResponse for unknown sequence_number: #{pdu.sequence_number}" end if pdu.command_status != Pdu::Base::ESME_ROK logger.error "Error status in SubmitSmResponse: #{pdu.command_status}" if @delegate.respond_to?(:message_rejected) @delegate.(self, , pdu) end else logger.info "Got OK SubmitSmResponse (#{pdu.message_id} -> #{mt_message_id})" if @delegate.respond_to?(:message_accepted) @delegate.(self, , pdu) end end # Now we got the SMSC message id; create pending delivery report. @pdr_storage[pdu.] = when Pdu::SubmitMultiResponse = @ack_ids[pdu.sequence_number] if ! raise "Got SubmitMultiResponse for unknown sequence_number: #{pdu.sequence_number}" end if pdu.command_status != Pdu::Base::ESME_ROK logger.error "Error status in SubmitMultiResponse: #{pdu.command_status}" if @delegate.respond_to?(:message_rejected) @delegate.(self, , pdu) end else logger.info "Got OK SubmitMultiResponse (#{pdu.message_id} -> #{mt_message_id})" if @delegate.respond_to?(:message_accepted) @delegate.(self, , pdu) end end when Pdu::BindReceiverResponse case pdu.command_status when Pdu::Base::ESME_ROK logger.debug "Bound OK." @state = :bound if @delegate.respond_to?(:bound) @delegate.bound(self) end when Pdu::Base::ESME_RINVPASWD logger.warn "Invalid password." # scheduele the connection to close, which eventually will cause the unbound() delegate # method to be invoked. close_connection when Pdu::Base::ESME_RINVSYSID logger.warn "Invalid system id." close_connection else logger.warn "Unexpected BindReceiverResponse. Command status: #{pdu.command_status}" close_connection end else logger.warn "(#{self.class.name}) Received unexpected PDU: #{pdu.to_human}." close_connection end end |