mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	connection: do version check only once
This commit is contained in:
		
							parent
							
								
									0ef41252bd
								
							
						
					
					
						commit
						21bda3102b
					
				
					 1 changed files with 7 additions and 4 deletions
				
			
		| 
						 | 
					@ -45,6 +45,7 @@
 | 
				
			||||||
#define MAX_FDS 1024
 | 
					#define MAX_FDS 1024
 | 
				
			||||||
#define MAX_FDS_MSG 28
 | 
					#define MAX_FDS_MSG 28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define HDR_SIZE_V0	8
 | 
				
			||||||
#define HDR_SIZE	16
 | 
					#define HDR_SIZE	16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool debug_messages = 0;
 | 
					static bool debug_messages = 0;
 | 
				
			||||||
| 
						 | 
					@ -71,6 +72,7 @@ struct impl {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uint32_t version;
 | 
						uint32_t version;
 | 
				
			||||||
	size_t hdr_size;
 | 
						size_t hdr_size;
 | 
				
			||||||
 | 
						unsigned int checked:1;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** \endcond */
 | 
					/** \endcond */
 | 
				
			||||||
| 
						 | 
					@ -317,20 +319,20 @@ static int prepare_packet(struct pw_protocol_native_connection *conn, struct buf
 | 
				
			||||||
	buf->msg.opcode = p[1] >> 24;
 | 
						buf->msg.opcode = p[1] >> 24;
 | 
				
			||||||
	len = p[1] & 0xffffff;
 | 
						len = p[1] & 0xffffff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (buf->msg.id == 0 && buf->msg.opcode == 1) {
 | 
						if (!impl->checked) {
 | 
				
			||||||
		if (p[3] >= 4) {
 | 
							if (p[3] >= 4) {
 | 
				
			||||||
			pw_log_warn("old version detected");
 | 
								pw_log_warn("old version detected");
 | 
				
			||||||
			impl->version = 0;
 | 
								impl->version = 0;
 | 
				
			||||||
			impl->hdr_size = 8;
 | 
								impl->hdr_size = HDR_SIZE_V0;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			impl->version = 3;
 | 
								impl->version = 3;
 | 
				
			||||||
			impl->hdr_size = 16;
 | 
								impl->hdr_size = HDR_SIZE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		spa_hook_list_call(&conn->listener_list,
 | 
							spa_hook_list_call(&conn->listener_list,
 | 
				
			||||||
				struct pw_protocol_native_connection_events,
 | 
									struct pw_protocol_native_connection_events,
 | 
				
			||||||
				start, 0, impl->version);
 | 
									start, 0, impl->version);
 | 
				
			||||||
 | 
							impl->checked = 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (impl->version >= 3) {
 | 
						if (impl->version >= 3) {
 | 
				
			||||||
		buf->msg.seq = p[2];
 | 
							buf->msg.seq = p[2];
 | 
				
			||||||
		buf->msg.n_fds = p[3];
 | 
							buf->msg.n_fds = p[3];
 | 
				
			||||||
| 
						 | 
					@ -338,6 +340,7 @@ static int prepare_packet(struct pw_protocol_native_connection *conn, struct buf
 | 
				
			||||||
		buf->msg.seq = 0;
 | 
							buf->msg.seq = 0;
 | 
				
			||||||
		buf->msg.n_fds = 0;
 | 
							buf->msg.n_fds = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data += impl->hdr_size;
 | 
						data += impl->hdr_size;
 | 
				
			||||||
	size -= impl->hdr_size;
 | 
						size -= impl->hdr_size;
 | 
				
			||||||
	buf->msg.fds = &buf->fds[buf->fds_offset];
 | 
						buf->msg.fds = &buf->fds[buf->fds_offset];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue