+ add_trace("calling_pn", "type", "%d", *type);
+ add_trace("calling_pn", "plan", "%d", *plan);
+ add_trace("calling_pn", "present", "%d", *present);
+ add_trace("calling_pn", "screen", "%d", *screen);
+ add_trace("calling_pn", "number", "%s", number);
+
+ /* second calling party number */
+ p = NULL;
+ i = 0;
+ while(i < numextra) {
+ if (!l3m->extra[i].val)
+ break;
+ if (l3m->extra[i].ie == IE_CALLING_PN) {
+ p = l3m->extra[i].val;
+ break;
+ }
+ i++;
+ }
+ if (!p)
+ return;
+ if (p[0] < 1) {
+ add_trace("calling_pn2", "error", "IE too short (len=%d)", p[0]);
+ return;
+ }
+
+ *type2 = (p[1]&0x70) >> 4;
+ *plan2 = p[1] & 0xf;
+ if (!(p[1] & 0x80)) {
+ if (p[0] < 2) {
+ add_trace("calling_pn2", "error", "IE too short (len=%d)", p[0]);
+ return;
+ }
+ *present2 = (p[2]&0x60) >> 5;
+ *screen2 = p[2] & 0x3;
+ strnncpy(number2, p+3, p[0]-2, number_len2);
+ } else {
+ strnncpy(number2, p+2, p[0]-1, number_len2);
+ }
+
+ add_trace("call_pn 2", "type", "%d", *type2);
+ add_trace("call_pn 2", "plan", "%d", *plan2);
+ add_trace("call_pn 2", "present", "%d", *present2);
+ add_trace("call_pn 2", "screen", "%d", *screen2);
+ add_trace("call_pn 2", "number", "%s", number2);