--- gateway/gw/smsc/smpp_pdu.c	2002-09-04 20:42:56.000000000 +0300
+++ gateway/gw/smsc/smpp_pdu.c	2002-09-05 10:40:52.000000000 +0300
@@ -79,7 +79,7 @@
 	} break;
     #include "smpp_pdu.def"
     default:
-    	error(0, "Unknown SMPP_PDU type, internal error.");
+    	error(0, "Unknown SMPP_PDU type, internal error, please implement type %0lx.", type);
     	gw_free(pdu);
 	return NULL;
     }
@@ -101,7 +101,7 @@
     	case id: { struct name *p = &pdu->u.name; fields } break;
     #include "smpp_pdu.def"
     default:
-    	error(0, "Unknown SMPP_PDU type, internal error while destroying.");
+    	error(0, "Unknown SMPP_PDU type, internal error while destroying, please implement type %0lx.", pdu->type);
     }
     gw_free(pdu);
 }
@@ -126,7 +126,8 @@
     	case id: { struct name *p = &pdu->u.name; fields } break;
     #include "smpp_pdu.def"
     default:
-    	error(0, "Unknown SMPP_PDU type, internal error while packing.");
+    	error(0, "Unknown SMPP_PDU type, internal error while packing, please implement type %0lx.", pdu->type);
+        goto error;
     }
 
     switch (pdu->type) {
@@ -151,7 +152,8 @@
     	case id: { struct name *p = &pdu->u.name; fields } break;
     #include "smpp_pdu.def"
     default:
-    	error(0, "Unknown SMPP_PDU type, internal error while packing.");
+    	error(0, "Unknown SMPP_PDU type, internal error while packing, please implement type %0lx.", pdu->type);
+        goto error;
     }
 
     temp = octstr_create("");
@@ -160,6 +162,10 @@
     octstr_destroy(temp);
 
     return os;
+
+error:
+    octstr_destroy(os);
+    return NULL;
 }
 
 
@@ -220,7 +226,7 @@
     	case id: { struct name *p = &pdu->u.name; fields } break;
     #include "smpp_pdu.def"
     default:
-    	error(0, "Unknown SMPP_PDU type, internal error.");
+    	error(0, "Unknown SMPP_PDU type, internal error, please implement type %0lx.", pdu->type);
 	break;
     }
     debug("sms.smpp", 0, "SMPP PDU dump ends.");
