shithub: rtmp

Download patch

ref: eb0b032482a8c6ebb356d61c40c453d38318f93a
parent: 02a850608753ed9c743dfd6992ad56e4c4ea3d53
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Thu Jul 29 05:36:20 EDT 2021

move msg pretty-printing elsewhere

--- a/rtmp.c
+++ b/rtmp.c
@@ -163,6 +163,12 @@
 	[CtlPingResponse] = "PingResponse",
 };
 
+static char *bwlimit2s[] = {
+	[LimitHard] = "hard",
+	[LimitSoft] = "soft",
+	[LimitDynamic] = "dynamic",
+};
+
 extern int debug;
 
 static void
@@ -264,9 +270,6 @@
 		}
 	}
 
-	if(debug)
-		fprint(2, "→ %M\n", &r->msg);
-
 	return 0;
 
 err:
@@ -317,10 +320,27 @@
 		}
 	}
 
-	Bflush(r);
+	if(Bflush(r) < 0)
+		goto err;
 
-	if(debug)
-		fprint(2, "← %M\n", &r->msg);
+	if(debug){
+		fprint(2, "← %M", &r->msg);
+		if(r->msg.type == AMF0Command){
+			Amf0 *a;
+			u8int *s, *e;
+			fprint(2, ":");
+			s = r->msg.data;
+			e = s + r->msg.sz;
+			for(; s != nil && s != e;){
+				if((s = amf0parse(&a, s, e)) != nil)
+					fprint(2, " %A", a);
+				else
+					fprint(2, " %r");
+				amf0free(a);
+			}
+		}
+		fprint(2, "\n");
+	}
 
 	if(r->msg.type == AMF0Command){
 		c = emalloc(sizeof(*c));
@@ -383,6 +403,9 @@
 		s = r->msg.data;
 		e = s + r->msg.sz;
 
+		if(debug)
+			fprint(2, "→ %M", &r->msg);
+
 		switch(m->type){
 		case AMF0Command:
 			c = nil;
@@ -413,6 +436,8 @@
 					break;
 				}
 			}
+			if(debug)
+				fprint(2, " tid=%A: %A %A %A", a[CbTransID], a[CbCommand], a[CbObject], a[CbResponse]);
 			if(c->prev != nil)
 				c->prev->next = c->next;
 			if(c->next != nil)
@@ -431,7 +456,7 @@
 				goto err;
 			}
 			if(debug)
-				fprint(2, "new chunk size: %d bytes\n", r->chunk);
+				fprint(2, ": %d", r->chunk);
 			break;
 
 		case UserControl:
@@ -451,11 +476,11 @@
 					USED(n);
 				}
 				if(debug)
-					fprint(2, "control message: %s %d\n", ctl2s[s16], n);
+					fprint(2, ": %s %d", ctl2s[s16], n);
 				break;
 			default:
 				if(debug)
-					fprint(2, "unknown control message %d (value %d)\n", s16, n);
+					fprint(2, ": ?%d? %d", s16, n);
 				break;
 			}
 			break;
@@ -463,11 +488,15 @@
 		case WindowAckSize:
 			if(amf0i32get(s, e, &r->winacksz) == nil)
 				goto err;
+			if(debug)
+				fprint(2, ": %d", r->winacksz);
 			break;
 
 		case SetBandwidth:
 			if((s = amf0i32get(s, e, &r->bw)) == nil || amf0byteget(s, e, &r->bwlimit) == nil)
 				goto err;
+			if(debug)
+				fprint(2, ": %d (%s)", r->bw, r->bwlimit < nelem(bwlimit2s) ? bwlimit2s[r->bwlimit] : "???");
 			break;
 
 		/* FIXME */
@@ -484,12 +513,15 @@
 		case AMF3SharedObject:
 		case AMF3Command:
 			if(debug)
-				fprint(2, "AMF3 message, ignoring\n");
+				fprint(2, ": ignored");
 			break;
 err:
 			res = -1;
 			break;
 		}
+
+		if(debug)
+			fprint(2, "\n");
 	}
 
 	rtmpfree(r);
@@ -567,27 +599,10 @@
 static int
 msgfmt(Fmt *f)
 {
-	u8int *s, *e;
 	Message *m;
-	Amf0 *a;
 
 	m = va_arg(f->args, Message*);
-
 	fmtprint(f, "type=%T cs=%d ts=%ud sz=%d", m->type, m->cs, m->ts, m->sz);
-
-	s = m->data;
-	e = s + m->sz;
-
-	if(m->type == AMF0Command){
-		fmtprint(f, ":");
-		for(; s != nil && s != e;){
-			if((s = amf0parse(&a, s, e)) != nil)
-				fmtprint(f, " %A", a);
-			else
-				fmtprint(f, " %r");
-			amf0free(a);
-		}
-	}
 
 	return 0;
 }