librpc/rpc: add dcerpc_binding_[g|s]et_transport()
authorStefan Metzmacher <metze@samba.org>
Sat, 25 Jan 2014 09:39:55 +0000 (10:39 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 13 Feb 2014 10:54:15 +0000 (11:54 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
librpc/rpc/binding.c
librpc/rpc/rpc_common.h

index 43bbbce25405001f7586c24397b9fc1e72dec554..984f5ee8af81e907767fff9d5ee5b3dc751bfb3c 100644 (file)
@@ -457,6 +457,39 @@ _PUBLIC_ NTSTATUS dcerpc_binding_set_object(struct dcerpc_binding *b,
        return NT_STATUS_OK;
 }
 
+_PUBLIC_ enum dcerpc_transport_t dcerpc_binding_get_transport(const struct dcerpc_binding *b)
+{
+       return b->transport;
+}
+
+_PUBLIC_ NTSTATUS dcerpc_binding_set_transport(struct dcerpc_binding *b,
+                                              enum dcerpc_transport_t transport)
+{
+       char *tmp = discard_const_p(char, b->endpoint);
+
+       /*
+        * TODO: we may want to check the transport value is
+        * wellknown.
+        */
+       if (b->transport == transport) {
+               return NT_STATUS_OK;
+       }
+
+       b->transport = transport;
+
+       /*
+        * This implicitly resets the endpoint
+        * as the endpoint is transport specific.
+        *
+        * TODO: in future we may reset more options
+        * here.
+        */
+       talloc_free(tmp);
+       b->endpoint = NULL;
+
+       return NT_STATUS_OK;
+}
+
 _PUBLIC_ void dcerpc_binding_get_auth_info(const struct dcerpc_binding *b,
                                           enum dcerpc_AuthType *_auth_type,
                                           enum dcerpc_AuthLevel *_auth_level)
@@ -621,8 +654,7 @@ _PUBLIC_ NTSTATUS dcerpc_binding_set_string_option(struct dcerpc_binding *b,
                        return NT_STATUS_INVALID_PARAMETER_MIX;
                }
 
-               b->transport = t;
-               return NT_STATUS_OK;
+               return dcerpc_binding_set_transport(b, t);
        }
 
        ret = strcmp(name, "object");
index 473d126a6a49c6b25d87ecb0baa8e2653dee9c97..22bb26a910cdb6c0eb1a1fcd9dd323395c533ae2 100644 (file)
@@ -136,6 +136,9 @@ char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b)
 struct GUID dcerpc_binding_get_object(const struct dcerpc_binding *b);
 NTSTATUS dcerpc_binding_set_object(struct dcerpc_binding *b,
                                   struct GUID object);
+enum dcerpc_transport_t dcerpc_binding_get_transport(const struct dcerpc_binding *b);
+NTSTATUS dcerpc_binding_set_transport(struct dcerpc_binding *b,
+                                     enum dcerpc_transport_t transport);
 void dcerpc_binding_get_auth_info(const struct dcerpc_binding *b,
                                  enum dcerpc_AuthType *_auth_type,
                                  enum dcerpc_AuthLevel *_auth_level);