svn commit: samba r2956 - in branches/SAMBA_4_0/source/librpc: idl rpc

jelmer at samba.org jelmer at samba.org
Wed Oct 13 20:09:47 GMT 2004


Author: jelmer
Date: 2004-10-13 20:09:46 +0000 (Wed, 13 Oct 2004)
New Revision: 2956

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/librpc&rev=2956&nolog=1

Log:
Fix towers_length for now. I'm currently working on a pidl extension 
that can generate these kinds of functions

Modified:
   branches/SAMBA_4_0/source/librpc/idl/epmapper.idl
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/epmapper.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/epmapper.idl	2004-10-13 19:40:22 UTC (rev 2955)
+++ branches/SAMBA_4_0/source/librpc/idl/epmapper.idl	2004-10-13 20:09:46 UTC (rev 2956)
@@ -194,7 +194,7 @@
 	} epm_towers;
 
 	typedef struct {
-		uint32 tower_length;
+		[value(ndr_size_epm_towers(&r->towers))] uint32  tower_length;
 		[subcontext(4)] epm_towers towers;
 	} epm_twr_t;
 

Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c	2004-10-13 19:40:22 UTC (rev 2955)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c	2004-10-13 20:09:46 UTC (rev 2956)
@@ -23,6 +23,58 @@
 #include "includes.h"
 
 /*
+  this ndr_size_* stuff should really be auto-generated ....
+*/
+
+static size_t ndr_size_epm_floor(struct epm_floor *fl)
+{
+	size_t ret = 5;
+	if (fl->lhs.protocol == EPM_PROTOCOL_UUID) {
+		ret += 18;
+	} else {
+		ret += fl->lhs.info.lhs_data.length;
+	}
+	switch (fl->lhs.protocol) {
+	case EPM_PROTOCOL_TCP: 
+	case EPM_PROTOCOL_UDP: 
+	case EPM_PROTOCOL_HTTP:
+	case EPM_PROTOCOL_UUID:
+		ret += 2; 
+		break;
+	case EPM_PROTOCOL_IP:
+		ret += 4;
+		break;
+	case EPM_PROTOCOL_NCADG:
+	case EPM_PROTOCOL_NCACN:
+	case EPM_PROTOCOL_NCALRPC:
+		ret += 2;
+		break;
+
+	case EPM_PROTOCOL_SMB:
+		ret += strlen(fl->rhs.smb.unc)+1;
+		break;
+	case EPM_PROTOCOL_PIPE:
+		ret += strlen(fl->rhs.pipe.path)+1;
+		break;
+	case EPM_PROTOCOL_NETBIOS:
+		ret += strlen(fl->rhs.netbios.name)+1;
+		break;
+	}
+	
+	return ret;
+}
+
+size_t ndr_size_epm_towers(struct epm_towers *towers)
+{
+	size_t ret = 2;
+	int i;
+	for (i=0;i<towers->num_floors;i++) {
+		ret += ndr_size_epm_floor(&towers->floors[i]);
+	}
+	return ret;
+}
+
+/*
   work out what TCP port to use for a given interface on a given host
 */
 NTSTATUS dcerpc_epm_map_tcp_port(const char *server, 



More information about the samba-cvs mailing list