summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2012-01-27 16:55:06 -0500
committerJonny Lamb <jonny.lamb@collabora.co.uk>2012-01-31 11:56:26 -0500
commitee37854515a60e06ef97456db2329571d736d7e2 (patch)
treee7393545b0f57cd04ba06addced65230c13445f6
parentd8e55a00c68443763f6826c4057684ec290ad0dd (diff)
channel: remove deprecated methods & signals
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r--docs/reference/telepathy-glib-sections.txt18
-rw-r--r--examples/future/call-cm/call-channel.c29
-rw-r--r--spec/Channel.xml196
-rw-r--r--telepathy-glib/base-channel.c37
-rw-r--r--telepathy-glib/channel.c193
-rw-r--r--tests/dbus/base-client.c4
-rw-r--r--tests/dbus/channel-dispatch-operation.c4
-rw-r--r--tests/dbus/channel-introspect.c54
-rw-r--r--tests/dbus/channel.c6
-rw-r--r--tests/dbus/finalized-in-invalidated-handler.c2
-rw-r--r--tests/dbus/simple-approver.c2
-rw-r--r--tests/dbus/simple-handler.c2
-rw-r--r--tests/dbus/simple-observer.c2
-rw-r--r--tests/lib/simple-conn.c2
-rw-r--r--tests/lib/textchan-null.c39
-rw-r--r--tests/lib/textchan-null.h4
16 files changed, 109 insertions, 485 deletions
diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt
index 3a0738bcd..6f38d0e52 100644
--- a/docs/reference/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib-sections.txt
@@ -348,15 +348,6 @@ TpSvcChannelClass
tp_svc_channel_close_impl
tp_svc_channel_implement_close
tp_svc_channel_return_from_close
-tp_svc_channel_get_channel_type_impl
-tp_svc_channel_implement_get_channel_type
-tp_svc_channel_return_from_get_channel_type
-tp_svc_channel_get_handle_impl
-tp_svc_channel_implement_get_handle
-tp_svc_channel_return_from_get_handle
-tp_svc_channel_get_interfaces_impl
-tp_svc_channel_implement_get_interfaces
-tp_svc_channel_return_from_get_interfaces
tp_svc_channel_emit_closed
<SUBSECTION>
TpSvcChannelInterfaceDestroyable
@@ -2761,17 +2752,8 @@ TP_IS_CHANNEL
TP_IS_CHANNEL_CLASS
<SUBSECTION>
tp_cli_channel_call_close
-tp_cli_channel_call_get_channel_type
-tp_cli_channel_call_get_handle
-tp_cli_channel_call_get_interfaces
tp_cli_channel_callback_for_close
-tp_cli_channel_callback_for_get_channel_type
-tp_cli_channel_callback_for_get_handle
-tp_cli_channel_callback_for_get_interfaces
tp_cli_channel_run_close
-tp_cli_channel_run_get_channel_type
-tp_cli_channel_run_get_handle
-tp_cli_channel_run_get_interfaces
tp_cli_channel_connect_to_closed
tp_cli_channel_signal_callback_closed
<SUBSECTION>
diff --git a/examples/future/call-cm/call-channel.c b/examples/future/call-cm/call-channel.c
index 85c87d625..5c0093007 100644
--- a/examples/future/call-cm/call-channel.c
+++ b/examples/future/call-cm/call-channel.c
@@ -902,32 +902,6 @@ channel_close (TpSvcChannel *iface,
}
static void
-channel_get_channel_type (TpSvcChannel *iface G_GNUC_UNUSED,
- DBusGMethodInvocation *context)
-{
- tp_svc_channel_return_from_get_channel_type (context,
- FUTURE_IFACE_CHANNEL_TYPE_CALL);
-}
-
-static void
-channel_get_handle (TpSvcChannel *iface,
- DBusGMethodInvocation *context)
-{
- ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (iface);
-
- tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT,
- self->priv->handle);
-}
-
-static void
-channel_get_interfaces (TpSvcChannel *iface G_GNUC_UNUSED,
- DBusGMethodInvocation *context)
-{
- tp_svc_channel_return_from_get_interfaces (context,
- example_call_channel_interfaces);
-}
-
-static void
channel_iface_init (gpointer iface,
gpointer data)
{
@@ -935,9 +909,6 @@ channel_iface_init (gpointer iface,
#define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x)
IMPLEMENT (close);
- IMPLEMENT (get_channel_type);
- IMPLEMENT (get_handle);
- IMPLEMENT (get_interfaces);
#undef IMPLEMENT
}
diff --git a/spec/Channel.xml b/spec/Channel.xml
index 11d3e509c..12c85f84e 100644
--- a/spec/Channel.xml
+++ b/spec/Channel.xml
@@ -18,7 +18,7 @@ Lesser General Public License for more details.</p>
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
</tp:license>
- <interface name="org.freedesktop.Telepathy.Channel">
+ <interface name="im.telepathy1.Channel">
<property name="ChannelType" type="s" tp:type="DBus_Interface"
access="read" tp:name-for-bindings="Channel_Type">
@@ -27,11 +27,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<p>The channel's type. This cannot change once the channel has
been created.</p>
- <p>For compatibility between older connection managers and newer
- clients, if this is unavailable or is an empty string,
- clients MUST use the result of calling
- <tp:member-ref>GetChannelType</tp:member-ref>.</p>
-
<tp:rationale>
The GetAll method lets clients retrieve all properties in one
round-trip, which is desirable.
@@ -55,21 +50,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
the channel type and the Channel interface itself, and cannot
change once the channel has been created.</p>
- <p>For compatibility between older connection managers and newer
- clients, if this is unavailable, or if this is an empty list and
- <tp:member-ref>ChannelType</tp:member-ref> is an empty string,
- clients MUST use the result of calling
- <tp:member-ref>GetInterfaces</tp:member-ref> instead. If this is an
- empty list but ChannelType is non-empty, clients SHOULD NOT call
- GetInterfaces; this implies that connection managers that implement
- the ChannelType property MUST also implement the Interfaces property
- correctly.</p>
-
- <tp:rationale>
- The GetAll method lets clients retrieve all properties in one
- round-trip, which is desirable.
- </tp:rationale>
-
<p>When requesting a channel with a particular value for this
property, the request must fail without side-effects unless the
connection manager expects to be able to provide a channel whose
@@ -102,7 +82,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
MUST be present and not Handle_Type_None, and
<tp:member-ref>TargetID</tp:member-ref> MUST NOT be
present. Properties from
- <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel.Interface">Addressing.DRAFT</tp:dbus-ref>
+ <tp:dbus-ref namespace="im.telepathy1.Channel.Interface">Addressing1</tp:dbus-ref>
MUST NOT be present.</p>
<p>The channel that satisfies the request MUST either:</p>
@@ -136,11 +116,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<ul>
<li>New channel C is signalled with target handle T</li>
<li>Client calls <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
+ namespace="im.telepathy1.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
[T])</li>
<li>Channel C closes, removing the last reference to handle T</li>
<li><tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
+ namespace="im.telepathy1.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
[T]) returns an error</li>
</ul>
</tp:rationale>
@@ -150,11 +130,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
MUST be present and not Handle_Type_None, and
<tp:member-ref>TargetHandle</tp:member-ref> MUST NOT be
present. Properties from
- <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel.Interface">Addressing.DRAFT</tp:dbus-ref>
+ <tp:dbus-ref namespace="im.telepathy1.Channel.Interface">Addressing1</tp:dbus-ref>
MUST NOT be present.The request MUST fail with error InvalidHandle,
without side-effects, if the requested TargetID would not be
accepted by
- <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">RequestHandles</tp:dbus-ref>.</p>
+ <tp:dbus-ref namespace="im.telepathy1.Connection">RequestHandles</tp:dbus-ref>.</p>
<p>The returned channel must be related to the handle corresponding
to the given identifier, in the same way as if TargetHandle
@@ -197,14 +177,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
such as contact list channels may not be closed.
</tp:docstring>
<tp:possible-errors>
- <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
- <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
- <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
+ <tp:error name="im.telepathy1.Error.Disconnected"/>
+ <tp:error name="im.telepathy1.Error.NetworkError"/>
+ <tp:error name="im.telepathy1.Error.NotImplemented">
<tp:docstring>
This channel may never be closed, e.g. a contact list
</tp:docstring>
</tp:error>
- <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
+ <tp:error name="im.telepathy1.Error.NotAvailable">
<tp:docstring>
This channel is not currently in a state where it can be closed,
e.g. a non-empty user-defined contact group
@@ -222,84 +202,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</tp:docstring>
</signal>
- <method name="GetChannelType" tp:name-for-bindings="Get_Channel_Type">
- <tp:deprecated version="0.17.7">Use the ChannelType
- property if possible.</tp:deprecated>
- <arg direction="out" type="s" tp:type="DBus_Interface"
- name="Channel_Type">
- <tp:docstring>The interface name</tp:docstring>
- </arg>
- <tp:docstring>
- Returns the interface name for the type of this channel. Clients
- SHOULD use the <tp:member-ref>ChannelType</tp:member-ref> property
- instead, falling back to this method only if necessary.
-
- <tp:rationale>
- The GetAll method lets clients retrieve all properties in one
- round-trip.
- </tp:rationale>
- </tp:docstring>
- </method>
-
- <method name="GetHandle" tp:name-for-bindings="Get_Handle">
- <tp:deprecated version="0.17.7">Use the TargetHandleType
- and TargetHandle properties if possible.</tp:deprecated>
- <arg direction="out" type="u" tp:type="Handle_Type"
- name="Target_Handle_Type">
- <tp:docstring>
- The same as TargetHandleType.
- </tp:docstring>
- </arg>
- <arg direction="out" type="u" tp:type="Handle" name="Target_Handle">
- <tp:docstring>
- The same as TargetHandle.
- </tp:docstring>
- </arg>
- <tp:docstring>
- Returns the handle type and number if this channel represents a
- communication with a particular contact, room or server-stored list, or
- zero if it is transient and defined only by its contents. Clients
- SHOULD use the <tp:member-ref>TargetHandle</tp:member-ref> and
- <tp:member-ref>TargetHandleType</tp:member-ref> properties instead,
- falling back to this method only if necessary.
-
- <tp:rationale>
- The GetAll method lets clients retrieve all properties in one
- round-trip.
- </tp:rationale>
- </tp:docstring>
- </method>
-
- <method name="GetInterfaces" tp:name-for-bindings="Get_Interfaces">
- <tp:deprecated version="0.17.7">Use the Interfaces
- property if possible.</tp:deprecated>
- <arg direction="out" type="as" tp:type="DBus_Interface[]"
- name="Interfaces">
- <tp:docstring>
- An array of the D-Bus interface names
- </tp:docstring>
- </arg>
- <tp:docstring>
- Get the optional interfaces implemented by the channel.
- Clients SHOULD use the <tp:member-ref>Interfaces</tp:member-ref>
- property instead, falling back to this method only if necessary.
-
- <tp:rationale>
- The GetAll method lets clients retrieve all properties in one
- round-trip.
- </tp:rationale>
- </tp:docstring>
- </method>
-
<property name="Requested" tp:name-for-bindings="Requested"
type="b" access="read">
<tp:added version="0.17.13">(as stable API)</tp:added>
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>True if this channel was created in response to a local request,
such as a call to
- <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.RequestChannel</tp:dbus-ref>
- or
- <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.CreateChannel</tp:dbus-ref>.</p>
+ <tp:dbus-ref namespace="im.telepathy1">Connection.Interface.Requests.CreateChannel</tp:dbus-ref>.</p>
<tp:rationale>
<p>The idea of this property is to distinguish between "incoming"
@@ -320,34 +229,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
e.g. because joining a Tube in a MUC context on XMPP implies
joining that MUC), then this property is false.</p>
- <p>For compatibility with older connection managers, clients SHOULD
- assume that this property is true if they see a channel announced
- by the
- <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.NewChannel</tp:dbus-ref>
- signal with the suppress_handler parameter set to true.</p>
-
- <tp:rationale>
- <p>In a correct connection manager, the only way to get such a
- channel is to request it.</p>
- </tp:rationale>
-
- <p>Clients MAY additionally assume that this property is false
- if they see a channel announced by the NewChannel signal with the
- suppress_handler parameter set to false.</p>
-
- <tp:rationale>
- <p>This is more controversial, since it's possible to get that
- parameter set to false by requesting a channel. However, there's
- no good reason to do so, and we've deprecated this practice.</p>
-
- <p>In the particular case of the channel dispatcher, the only
- side-effect of wrongly thinking a channel is unrequested
- is likely to be that the user has to confirm that they want to
- use it, so it seems fairly harmless to assume in the channel
- dispatcher that channels with suppress_handler false are
- indeed unrequested.</p>
- </tp:rationale>
-
<p>It does not make sense for this property to be in channel
requests—it will always be true for channels returned by
CreateChannel, and callers of EnsureChannel cannot control whether an
@@ -383,14 +264,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<p>For channels requested by the
local user, this MUST be the value of
- <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.SelfHandle</tp:dbus-ref>
+ <tp:dbus-ref namespace="im.telepathy1">Connection.SelfHandle</tp:dbus-ref>
at the time the channel was created (i.e. not a channel-specific
handle).</p>
<tp:rationale>
<p>On some protocols, the SelfHandle may change (as signalled by
<tp:dbus-ref
- namespace="org.freedesktop.Telepathy">Connection.SelfHandleChanged</tp:dbus-ref>),
+ namespace="im.telepathy1">Connection.SelfHandleChanged</tp:dbus-ref>),
but this property is immutable. Hence, locally-requested channels'
InitiatorHandle and InitiatorID may not match the current
SelfHandle; <tp:member-ref>Requested</tp:member-ref> can be used to
@@ -404,7 +285,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
anonymous).</p>
<p>For channels with the <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Channel.Interface">Group</tp:dbus-ref>
+ namespace="im.telepathy1.Channel.Interface">Group1</tp:dbus-ref>
interface, this SHOULD be the same
contact who is signalled as the "Actor" causing the self-handle
to be placed in the local-pending set.</p>
@@ -430,14 +311,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
condition:</p>
<ul>
- <li>New StreamedMedia channel C is signalled with initiator
+ <li>New Call channel C is signalled with initiator
handle I</li>
<li>Client calls <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
+ namespace="im.telepathy1.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
[I])</li>
<li>Channel C closes, removing the last reference to handle I</li>
<li><tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
+ namespace="im.telepathy1.Connection">InspectHandles</tp:dbus-ref>(CONTACT,
[I]) returns an error</li>
<li>Client can indicate that a call was missed, but not who
called!</li>
@@ -451,18 +332,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</property>
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>All communication in the Telepathy framework is carried out via channel
- objects which are created and managed by connections. This interface must
- be implemented by all channel objects, along with one single channel type,
- such as <tp:dbus-ref
- namespace="org.freedesktop.Telepathy">Channel.Type.ContactList</tp:dbus-ref>
- which represents a list of people (such as a buddy list) or <tp:dbus-ref
- namespace="org.freedesktop.Telepathy">Channel.Type.Text</tp:dbus-ref> which
- represents a channel over which textual messages are sent and received.</p>
+ <p>
+ All communication in the Telepathy framework is carried out via
+ channel objects which are created and managed by
+ connections. This interface must be implemented by all channel
+ objects, along with one single channel type, such as
+ <tp:dbus-ref
+ namespace="im.telepathy1">Channel.Type.Text</tp:dbus-ref> which
+ represents a channel over which textual messages are sent and
+ received.</p>
<p>Each Channel's object path MUST start with the object path of
its associated <tp:dbus-ref
- namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>, followed
+ namespace="im.telepathy1">Connection</tp:dbus-ref>, followed
by '/'. There MAY be any number of additional object-path components,
which clients MUST NOT attempt to parse.</p>
@@ -479,11 +361,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<p>Each channel has a number of immutable properties (which cannot vary
after the channel has been announced with <tp:dbus-ref
- namespace='ofdT.Connection.Interface.Requests'>NewChannels</tp:dbus-ref>),
+ namespace='imt1.Connection.Interface.Requests'>NewChannels</tp:dbus-ref>),
provided to clients in the
- <tp:dbus-ref namespace='ofdT.Client.Observer'>ObserveChannels</tp:dbus-ref>,
- <tp:dbus-ref namespace='ofdT.Client.Approver'>AddDispatchOperation</tp:dbus-ref> and
- <tp:dbus-ref namespace='ofdT.Client.Handler'>HandleChannels</tp:dbus-ref>
+ <tp:dbus-ref namespace='imt1.Client.Observer'>ObserveChannels</tp:dbus-ref>,
+ <tp:dbus-ref namespace='imt1.Client.Approver'>AddDispatchOperation</tp:dbus-ref> and
+ <tp:dbus-ref namespace='imt1.Client.Handler'>HandleChannels</tp:dbus-ref>
methods to permit immediate identification of the channel. This interface
contains immutable properties common to all channels. In brief:</p>
@@ -507,12 +389,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<p>Other optional <tp:member-ref>Interfaces</tp:member-ref> can be
implemented to indicate other available
functionality, such as <tp:dbus-ref
- namespace="org.freedesktop.Telepathy">Channel.Interface.Group</tp:dbus-ref>
+ namespace="im.telepathy1">Channel.Interface.Group1</tp:dbus-ref>
if the channel contains a number of contacts, <tp:dbus-ref
- namespace="org.freedesktop.Telepathy">Channel.Interface.Password</tp:dbus-ref>
+ namespace="im.telepathy1">Channel.Interface.Password1</tp:dbus-ref>
to indicate that a channel may have a password set to require entry, and
<tp:dbus-ref
- namespace="org.freedesktop.Telepathy">Channel.Interface.ChatState</tp:dbus-ref>
+ namespace="im.telepathy1">Channel.Interface.ChatState1</tp:dbus-ref>
for typing notifications. The interfaces implemented may not vary after
the channel has been created. These other interfaces (along with the
interface named by <tp:member-ref>ChannelType</tp:member-ref>) may
@@ -524,11 +406,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
which indicates that the channel is defined by some other properties. For
instance, transient ad-hoc chat rooms may be defined only by their members (as visible
through the <tp:dbus-ref
- namespace="ofdT.Channel.Interface">Group</tp:dbus-ref>
+ namespace="imt1.Channel.Interface">Group1</tp:dbus-ref>
interface), and <tp:dbus-ref
- namespace='ofdT.Channel.Type'>ContactSearch</tp:dbus-ref>
+ namespace='imt1.Channel.Type'>ContactSearch1</tp:dbus-ref>
channels represent a single search attempt for a particular <tp:dbus-ref
- namespace='ofdT.Channel.Type.ContactSearch'>Server</tp:dbus-ref>.</p>
+ namespace='imt1.Channel.Type.ContactSearch1'>Server</tp:dbus-ref>.</p>
<p>Specific connection manager implementations may implement channel types and
interfaces which are not contained within this specification in order to
@@ -552,6 +434,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
guarantee that Channels' object paths had the Connection's object path
as a prefix.
</tp:changed>
+
+ <tp:changed version="UNRELEASED">Deprecated methods
+ (GetChannelType, GetHandle, and GetInterfaces) have been removed
+ from this interface.</tp:changed>
</interface>
</node>
<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/telepathy-glib/base-channel.c b/telepathy-glib/base-channel.c
index 43c173406..ae865ec16 100644
--- a/telepathy-glib/base-channel.c
+++ b/telepathy-glib/base-channel.c
@@ -881,36 +881,6 @@ tp_base_channel_class_init (TpBaseChannelClass *tp_base_channel_class)
}
static void
-tp_base_channel_get_channel_type (TpSvcChannel *iface,
- DBusGMethodInvocation *context)
-{
- TpBaseChannelClass *klass = TP_BASE_CHANNEL_GET_CLASS (iface);
-
- tp_svc_channel_return_from_get_channel_type (context, klass->channel_type);
-}
-
-static void
-tp_base_channel_get_handle (TpSvcChannel *iface,
- DBusGMethodInvocation *context)
-{
- TpBaseChannelClass *klass = TP_BASE_CHANNEL_GET_CLASS (iface);
- TpBaseChannel *chan = TP_BASE_CHANNEL (iface);
-
- tp_svc_channel_return_from_get_handle (context, klass->target_handle_type,
- chan->priv->target);
-}
-
-static void
-tp_base_channel_get_interfaces (TpSvcChannel *iface,
- DBusGMethodInvocation *context)
-{
- TpBaseChannel *chan = TP_BASE_CHANNEL (iface);
- TpBaseChannelClass *klass = TP_BASE_CHANNEL_GET_CLASS (chan);
-
- tp_svc_channel_return_from_get_interfaces (context, klass->interfaces);
-}
-
-static void
tp_base_channel_close_dbus (
TpSvcChannel *iface,
DBusGMethodInvocation *context)
@@ -935,12 +905,5 @@ channel_iface_init (gpointer g_iface,
{
TpSvcChannelClass *klass = (TpSvcChannelClass *) g_iface;
-#define IMPLEMENT(x) tp_svc_channel_implement_##x (\
- klass, tp_base_channel_##x)
- IMPLEMENT(get_channel_type);
- IMPLEMENT(get_handle);
- IMPLEMENT(get_interfaces);
-#undef IMPLEMENT
-
tp_svc_channel_implement_close (klass, tp_base_channel_close_dbus);
}
diff --git a/telepathy-glib/channel.c b/telepathy-glib/channel.c
index f4fda7b54..4765dea3b 100644
--- a/telepathy-glib/channel.c
+++ b/telepathy-glib/channel.c
@@ -810,57 +810,6 @@ _tp_channel_continue_introspection (TpChannel *self)
}
}
-
-static void
-tp_channel_got_interfaces_cb (TpChannel *self,
- const gchar **interfaces,
- const GError *error,
- gpointer unused,
- GObject *unused2)
-{
- if (error != NULL)
- {
- _tp_channel_abort_introspection (self, "GetInterfaces() failed", error);
- return;
- }
-
- self->priv->exists = TRUE;
- _tp_channel_maybe_set_interfaces (self, interfaces);
-
- /* FIXME: give subclasses a chance to influence the definition of "ready"
- * now that we have our interfaces? */
-
- _tp_channel_continue_introspection (self);
-}
-
-
-static void
-_tp_channel_get_interfaces (TpChannel *self)
-{
- DEBUG ("%p", self);
-
- if (tp_asv_lookup (self->priv->channel_properties,
- TP_PROP_CHANNEL_INTERFACES) != NULL &&
- (self->priv->exists ||
- tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP)))
- {
- /* If we already know the channel's interfaces, and either have already
- * successfully called a method on the channel (so know it's alive) or
- * are going to call one on it when we introspect the Group properties,
- * then we don't need to do anything here.
- */
- _tp_channel_continue_introspection (self);
- }
- else
- {
- /* either we don't know the Interfaces, or we just want to verify the
- * channel's existence */
- tp_cli_channel_call_get_interfaces (self, -1,
- tp_channel_got_interfaces_cb, NULL, NULL, NULL);
- }
-}
-
static void
_tp_channel_got_properties (TpProxy *proxy,
GHashTable *asv,
@@ -869,116 +818,75 @@ _tp_channel_got_properties (TpProxy *proxy,
GObject *object G_GNUC_UNUSED)
{
TpChannel *self = TP_CHANNEL (proxy);
+ gboolean valid;
+ guint u;
+ const gchar *s;
+ gboolean b;
+
- if (error == NULL)
+ if (error != NULL)
{
- gboolean valid;
- guint u;
- const gchar *s;
- gboolean b;
+ _tp_channel_abort_introspection (self, "GetAll failed", error);
+ return;
+ }
- DEBUG ("Received %u channel properties", g_hash_table_size (asv));
+ DEBUG ("Received %u channel properties", g_hash_table_size (asv));
- self->priv->exists = TRUE;
+ self->priv->exists = TRUE;
- _tp_channel_maybe_set_channel_type (self,
- tp_asv_get_string (asv, "ChannelType"));
- _tp_channel_maybe_set_interfaces (self,
- tp_asv_get_boxed (asv, "Interfaces", G_TYPE_STRV));
+ _tp_channel_maybe_set_channel_type (self,
+ tp_asv_get_string (asv, "ChannelType"));
+ _tp_channel_maybe_set_interfaces (self,
+ tp_asv_get_boxed (asv, "Interfaces", G_TYPE_STRV));
- u = tp_asv_get_uint32 (asv, "TargetHandleType", &valid);
- _tp_channel_maybe_set_handle_type (self, u, valid);
+ u = tp_asv_get_uint32 (asv, "TargetHandleType", &valid);
+ _tp_channel_maybe_set_handle_type (self, u, valid);
- u = tp_asv_get_uint32 (asv, "TargetHandle", &valid);
- _tp_channel_maybe_set_handle (self, u, valid);
+ u = tp_asv_get_uint32 (asv, "TargetHandle", &valid);
+ _tp_channel_maybe_set_handle (self, u, valid);
- _tp_channel_maybe_set_identifier (self,
- tp_asv_get_string (asv, "TargetID"));
+ _tp_channel_maybe_set_identifier (self,
+ tp_asv_get_string (asv, "TargetID"));
- u = tp_asv_get_uint32 (asv, "InitiatorHandle", &valid);
+ u = tp_asv_get_uint32 (asv, "InitiatorHandle", &valid);
- if (valid)
- {
- g_hash_table_insert (self->priv->channel_properties,
- g_strdup (TP_PROP_CHANNEL_INITIATOR_HANDLE),
- tp_g_value_slice_new_uint (u));
- }
+ if (valid)
+ {
+ g_hash_table_insert (self->priv->channel_properties,
+ g_strdup (TP_PROP_CHANNEL_INITIATOR_HANDLE),
+ tp_g_value_slice_new_uint (u));
+ }
- s = tp_asv_get_string (asv, "InitiatorID");
+ s = tp_asv_get_string (asv, "InitiatorID");
- if (s != NULL)
- {
- g_hash_table_insert (self->priv->channel_properties,
- g_strdup (TP_PROP_CHANNEL_INITIATOR_ID),
- tp_g_value_slice_new_string (s));
- }
-
- b = tp_asv_get_boolean (asv, "Requested", &valid);
+ if (s != NULL)
+ {
+ g_hash_table_insert (self->priv->channel_properties,
+ g_strdup (TP_PROP_CHANNEL_INITIATOR_ID),
+ tp_g_value_slice_new_string (s));
+ }
- if (valid)
- {
- g_hash_table_insert (self->priv->channel_properties,
- g_strdup (TP_PROP_CHANNEL_REQUESTED),
- tp_g_value_slice_new_boolean (b));
- }
+ b = tp_asv_get_boolean (asv, "Requested", &valid);
- g_object_notify ((GObject *) self, "channel-type");
- g_object_notify ((GObject *) self, "interfaces");
- g_object_notify ((GObject *) self, "handle-type");
- g_object_notify ((GObject *) self, "handle");
- g_object_notify ((GObject *) self, "identifier");
- }
- else
+ if (valid)
{
- /* GetAll failed; it's not mandatory, so continue with the separate
- * (spec 0.16.x-style) method calls */
- DEBUG ("GetAll failed, falling back to 0.16 API:"
- " %s", error->message);
+ g_hash_table_insert (self->priv->channel_properties,
+ g_strdup (TP_PROP_CHANNEL_REQUESTED),
+ tp_g_value_slice_new_boolean (b));
}
- /* Either way, we'll fill in any other gaps in the properties, then
- * continue with any other introspection */
+ g_object_notify ((GObject *) self, "channel-type");
+ g_object_notify ((GObject *) self, "interfaces");
+ g_object_notify ((GObject *) self, "handle-type");
+ g_object_notify ((GObject *) self, "handle");
+ g_object_notify ((GObject *) self, "identifier");
+
_tp_channel_continue_introspection (self);
}
-
static void
_tp_channel_get_properties (TpChannel *self)
{
- /* skip it if we already have all the details we want */
- if (self->priv->handle_type != TP_UNKNOWN_HANDLE_TYPE
- && (self->priv->handle != 0 ||
- self->priv->handle_type == TP_HANDLE_TYPE_NONE)
- && self->priv->channel_type != 0
- /* currently we always re-fetch the interfaces later, so don't check:
- && tp_asv_get_boxed (self->priv->channel_properties,
- TP_PROP_CHANNEL_INTERFACES, G_TYPE_STRV) != NULL
- */
- && tp_asv_get_string (self->priv->channel_properties,
- TP_PROP_CHANNEL_TARGET_ID) != NULL
- && tp_asv_get_string (self->priv->channel_properties,
- TP_PROP_CHANNEL_INITIATOR_ID) != NULL
- )
- {
- gboolean valid;
-
- tp_asv_get_uint32 (self->priv->channel_properties,
- TP_PROP_CHANNEL_INITIATOR_HANDLE, &valid);
-
- if (!valid)
- goto missing;
-
- tp_asv_get_boolean (self->priv->channel_properties,
- TP_PROP_CHANNEL_REQUESTED, &valid);
-
- if (!valid)
- goto missing;
-
- _tp_channel_continue_introspection (self);
- return;
- }
-
-missing:
tp_cli_dbus_properties_call_get_all (self, -1,
TP_IFACE_CHANNEL, _tp_channel_got_properties, NULL, NULL, NULL);
}
@@ -1125,15 +1033,6 @@ tp_channel_constructor (GType type,
g_queue_push_tail (self->priv->introspect_needed,
_tp_channel_create_contacts);
- /* This makes a call unless (a) we already know the Interfaces by now, and
- * (b) priv->exists is TRUE (i.e. either GetAll, GetHandle or GetChannelType
- * has succeeded).
- *
- * This means the channel never becomes ready until we re-enter the
- * main loop, and we always verify that the channel does actually exist. */
- g_queue_push_tail (self->priv->introspect_needed,
- _tp_channel_get_interfaces);
-
/* this needs doing *after* GetInterfaces so we know whether we're a group */
g_queue_push_tail (self->priv->introspect_needed,
_tp_channel_get_group_properties);
diff --git a/tests/dbus/base-client.c b/tests/dbus/base-client.c
index 080f28b5e..18539a0b0 100644
--- a/tests/dbus/base-client.c
+++ b/tests/dbus/base-client.c
@@ -129,7 +129,7 @@ setup (Test *test,
test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"object-path", chan_path,
"handle", handle,
@@ -152,7 +152,7 @@ setup (Test *test,
test->text_chan_service_2 = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"object-path", chan_path,
"handle", handle,
diff --git a/tests/dbus/channel-dispatch-operation.c b/tests/dbus/channel-dispatch-operation.c
index e8cae5452..db4810819 100644
--- a/tests/dbus/channel-dispatch-operation.c
+++ b/tests/dbus/channel-dispatch-operation.c
@@ -107,7 +107,7 @@ setup_services (Test *test,
test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"object-path", chan_path,
"handle", handle,
@@ -130,7 +130,7 @@ setup_services (Test *test,
test->text_chan_service_2 = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"object-path", chan_path,
"handle", handle,
diff --git a/tests/dbus/channel-introspect.c b/tests/dbus/channel-introspect.c
index b1e182849..86370f2c6 100644
--- a/tests/dbus/channel-introspect.c
+++ b/tests/dbus/channel-introspect.c
@@ -190,10 +190,6 @@ main (int argc,
tp_tests_proxy_run_until_dbus_queue_processed (conn);
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called = 0;
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called = 0;
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called = 0;
-
chan = tp_channel_new (conn, props_chan_path, NULL,
TP_UNKNOWN_HANDLE_TYPE, 0, &error);
g_assert_no_error (error);
@@ -209,15 +205,6 @@ main (int argc,
MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
g_assert_no_error (error);
- g_assert_cmpuint (
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called, ==,
- 0);
- g_assert_cmpuint (
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called,
- ==, 0);
- g_assert_cmpuint (
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called,
- ==, 0);
g_assert_cmpint (tp_proxy_is_prepared (chan, TP_CHANNEL_FEATURE_CORE), ==,
TRUE);
@@ -260,10 +247,6 @@ main (int argc,
tp_tests_proxy_run_until_dbus_queue_processed (conn);
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called = 0;
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called = 0;
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called = 0;
-
g_hash_table_remove_all (TP_TESTS_PROPS_TEXT_CHANNEL (service_props_chan)
->dbus_property_interfaces_retrieved);
@@ -288,20 +271,10 @@ main (int argc,
MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
g_assert_no_error (error);
g_assert_cmpuint (g_hash_table_size (
- service_props_chan->dbus_property_interfaces_retrieved), ==, 0);
- g_assert_cmpuint (
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called, ==, 0);
- g_assert_cmpuint (
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called,
- ==, 0);
- /* FIXME: with an improved fast-path we could avoid this one too maybe? */
- /*
- g_assert_cmpuint (
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called,
- ==, 0);
- */
+ service_props_chan->dbus_property_interfaces_retrieved), ==, 1);
- assert_chan_sane (chan, handle, FALSE, handle, IDENTIFIER);
+ assert_chan_sane (chan, handle, TRUE, service_conn_as_base->self_handle,
+ tp_handle_inspect (contact_repo, service_conn_as_base->self_handle));
g_object_unref (chan);
chan = NULL;
@@ -311,11 +284,6 @@ main (int argc,
tp_tests_proxy_run_until_dbus_queue_processed (conn);
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)->get_handle_called = 0;
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)->get_interfaces_called = 0;
- TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)->get_channel_type_called
- = 0;
-
g_hash_table_remove_all (TP_TESTS_PROPS_TEXT_CHANNEL (
service_props_group_chan)
->dbus_property_interfaces_retrieved);
@@ -348,22 +316,20 @@ main (int argc,
MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
g_assert_no_error (error);
- g_assert_cmpuint (TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)
- ->get_handle_called, ==, 0);
- g_assert_cmpuint (TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)
- ->get_channel_type_called, ==, 0);
- g_assert_cmpuint (TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)
- ->get_interfaces_called, ==, 0);
g_assert_cmpuint (g_hash_table_size (
TP_TESTS_PROPS_TEXT_CHANNEL (service_props_group_chan)
- ->dbus_property_interfaces_retrieved), ==, 1);
- /* Only Chan.I.Group's properties should have been retrieved */
+ ->dbus_property_interfaces_retrieved), ==, 2);
g_assert (g_hash_table_lookup (
TP_TESTS_PROPS_TEXT_CHANNEL (service_props_group_chan)
->dbus_property_interfaces_retrieved,
GUINT_TO_POINTER (TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP)) != NULL);
+ g_assert (g_hash_table_lookup (
+ TP_TESTS_PROPS_TEXT_CHANNEL (service_props_group_chan)
+ ->dbus_property_interfaces_retrieved,
+ GUINT_TO_POINTER (TP_IFACE_QUARK_CHANNEL)) != NULL);
- assert_chan_sane (chan, handle, FALSE, handle, IDENTIFIER);
+ assert_chan_sane (chan, handle, TRUE, service_conn_as_base->self_handle,
+ tp_handle_inspect (contact_repo, service_conn_as_base->self_handle));
g_object_unref (chan);
chan = NULL;
diff --git a/tests/dbus/channel.c b/tests/dbus/channel.c
index de162a8ed..ae520ae88 100644
--- a/tests/dbus/channel.c
+++ b/tests/dbus/channel.c
@@ -49,7 +49,7 @@ create_contact_chan (Test *test)
tp_clear_object (&test->chan_room_service);
/* Create service-side channel object */
- chan_path = g_strdup_printf ("%s/Channel",
+ chan_path = g_strdup_printf ("%s/ContactChannel",
tp_proxy_get_object_path (test->connection));
test->contact_repo = tp_base_connection_get_handles (test->base_connection,
@@ -61,7 +61,7 @@ create_contact_chan (Test *test)
g_assert_no_error (test->error);
test->chan_contact_service = tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"handle", handle,
"object-path", chan_path,
@@ -88,7 +88,7 @@ create_room_chan (Test *test)
tp_clear_object (&test->chan_room_service);
/* Create service-side channel object */
- chan_path = g_strdup_printf ("%s/Channel2",
+ chan_path = g_strdup_printf ("%s/RoomChannel",
tp_proxy_get_object_path (test->connection));
test->room_repo = tp_base_connection_get_handles (test->base_connection,
diff --git a/tests/dbus/finalized-in-invalidated-handler.c b/tests/dbus/finalized-in-invalidated-handler.c
index 90edd8925..0eeee5f40 100644
--- a/tests/dbus/finalized-in-invalidated-handler.c
+++ b/tests/dbus/finalized-in-invalidated-handler.c
@@ -121,7 +121,7 @@ main (int argc,
chan_path = g_strdup_printf ("%s/Channel", conn_path);
service_chan = TP_TESTS_TEXT_CHANNEL_NULL (tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", service_conn,
"object-path", chan_path,
"handle", handle,
diff --git a/tests/dbus/simple-approver.c b/tests/dbus/simple-approver.c
index fbd298cfa..d9465c943 100644
--- a/tests/dbus/simple-approver.c
+++ b/tests/dbus/simple-approver.c
@@ -94,7 +94,7 @@ setup (Test *test,
test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"object-path", chan_path,
"handle", handle,
diff --git a/tests/dbus/simple-handler.c b/tests/dbus/simple-handler.c
index 9e4594d45..fc10933d7 100644
--- a/tests/dbus/simple-handler.c
+++ b/tests/dbus/simple-handler.c
@@ -85,7 +85,7 @@ setup (Test *test,
test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"object-path", chan_path,
"handle", handle,
diff --git a/tests/dbus/simple-observer.c b/tests/dbus/simple-observer.c
index 9d532dc8f..7e64dfaf2 100644
--- a/tests/dbus/simple-observer.c
+++ b/tests/dbus/simple-observer.c
@@ -85,7 +85,7 @@ setup (Test *test,
test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", test->base_connection,
"object-path", chan_path,
"handle", handle,
diff --git a/tests/lib/simple-conn.c b/tests/lib/simple-conn.c
index 338ddd5c9..e3f6f7941 100644
--- a/tests/lib/simple-conn.c
+++ b/tests/lib/simple-conn.c
@@ -351,7 +351,7 @@ tp_tests_simple_connection_ensure_text_chan (TpTestsSimpleConnection *self,
chan = TP_TESTS_TEXT_CHANNEL_NULL (
tp_tests_object_new_static_class (
- TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
+ TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
"connection", self,
"object-path", chan_path,
"handle", handle,
diff --git a/tests/lib/textchan-null.c b/tests/lib/textchan-null.c
index 89a0198f3..c0455d5fc 100644
--- a/tests/lib/textchan-null.c
+++ b/tests/lib/textchan-null.c
@@ -475,42 +475,6 @@ channel_close (TpSvcChannel *iface,
}
static void
-channel_get_channel_type (TpSvcChannel *iface,
- DBusGMethodInvocation *context)
-{
- TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface);
-
- self->get_channel_type_called++;
-
- tp_svc_channel_return_from_get_channel_type (context,
- TP_IFACE_CHANNEL_TYPE_TEXT);
-}
-
-static void
-channel_get_handle (TpSvcChannel *iface,
- DBusGMethodInvocation *context)
-{
- TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface);
-
- self->get_handle_called++;
-
- tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT,
- self->priv->handle);
-}
-
-static void
-channel_get_interfaces (TpSvcChannel *iface,
- DBusGMethodInvocation *context)
-{
- TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface);
-
- self->get_interfaces_called++;
-
- tp_svc_channel_return_from_get_interfaces (context,
- tp_tests_text_channel_null_interfaces);
-}
-
-static void
channel_iface_init (gpointer iface,
gpointer data)
{
@@ -518,9 +482,6 @@ channel_iface_init (gpointer iface,
#define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x)
IMPLEMENT (close);
- IMPLEMENT (get_channel_type);
- IMPLEMENT (get_handle);
- IMPLEMENT (get_interfaces);
#undef IMPLEMENT
}
diff --git a/tests/lib/textchan-null.h b/tests/lib/textchan-null.h
index 0f5db8cff..96542c5e4 100644
--- a/tests/lib/textchan-null.h
+++ b/tests/lib/textchan-null.h
@@ -49,10 +49,6 @@ struct _TpTestsTextChannelNull {
GObject parent;
TpMessageMixin message;
- guint get_handle_called;
- guint get_interfaces_called;
- guint get_channel_type_called;
-
TpTestsTextChannelNullPrivate *priv;
};