-%define dllpath %{_libdir}/mono/tizen
-%define dllname Tizen.Network.IoTConnectivity.dll
+%define BUILDCONF Debug
Name: csapi-network-iotconnectivity
Summary: Tizen IoT Connectivity API for C#
Source1: %{name}.manifest
Source2: %{name}.pc.in
-# TODO: replace mono-compiler, mono-devel to mcs, mono-shlib-cop
BuildRequires: mono-compiler
BuildRequires: mono-devel
-# TODO: replace mono-core to gacutil.
-# mono-core should provide the symbol 'gacutil'
-Requires(post): mono-core
-Requires(postun): mono-core
-
-# P/Invoke Dependencies
BuildRequires: pkgconfig(glib-2.0)
-BuildRequires: pkgconfig(capi-appfw-application)
-
-# P/Invoke Runtime Dependencies
-# TODO: It should be removed after fix tizen-rpm-config
-Requires: glib-2.0
BuildRequires: pkgconfig(iotcon)
-# DLL Dependencies
BuildRequires: pkgconfig(csapi-tizen)
-#BuildRequires: ...
%description
-Tizen API for C#
+Tizen IoTConnectivity API for C#
%package devel
Summary: Development package for %{name}
cp %{SOURCE1} .
%build
-# build dll
-make
-
-# check p/invoke
-if [ -x %{dllname} ]; then
- RET=`mono-shlib-cop %{dllname}`; \
- CNT=`echo $RET | grep -E "^error:" | wc -l`; \
- if [ $CNT -gt 0 ]; then exit 1; fi
-fi
+xbuild Tizen.Network.IoTConnectivity/Tizen.Network.IoTConnectivity.csproj /p:Configuration=%{BUILDCONF}
%install
-# copy dll
-mkdir -p %{buildroot}%{dllpath}
-install -p -m 644 %{dllname} %{buildroot}%{dllpath}
+gacutil -i Tizen.Network.IoTConnectivity/bin/%{BUILDCONF}/Tizen.Network.IoTConnectivity.dll -root "%{buildroot}%{_libdir}" -package tizen
# generate pkgconfig
mkdir -p %{buildroot}%{_libdir}/pkgconfig
-sed -e "s#@version@#%{version}#g" \
- -e "s#@dllpath@#%{dllpath}#g" \
- -e "s#@dllname@#%{dllname}#g" \
+sed -e "s#@name@#%{name}#g" \
+ -e "s#@version@#%{version}#g" \
+ -e "s#@libs@#%{pc_libs}#g" \
%{SOURCE2} > %{buildroot}%{_libdir}/pkgconfig/%{name}.pc
-%post
-gacutil -i %{dllpath}/%{dllname}
-
%files
-%{dllpath}/%{dllname}
+%manifest %{name}.manifest
+%{_libdir}/mono/
%files devel
%{_libdir}/pkgconfig/%{name}.pc
+++ /dev/null
-ASM_DIRS := Tizen.Network.IoTConnectivity
-ASM_DLLS := $(addsuffix .dll,$(ASM_DIRS))
-
-FLAGS := /unsafe
-
-ALL: $(ASM_DLLS)
-
-define make-dll
-$(eval ASM = $(strip $1))
-$(eval SRC = $(shell find $(ASM) -path $(ASM)/obj -prune -o -name '*.cs' -print))
-$(eval PKG = $(shell echo $2 | tr ' ' ','))
-$(ASM).dll: $(SRC)
- @echo "[BUILD] $$@"
- @mcs /nologo /out:$$@ /t:library /keyfile:$(ASM)/$(ASM).snk $(addprefix /pkg:,$(PKG)) $(FLAGS) $(SRC)
- @echo "[CHECK] $$@"
- @RET=`mono-shlib-cop $$@`; \
- CNT=`echo $$$$RET | grep -e '^error:' | wc -l`; \
- if [ $$$$CNT -gt 0 ]; then echo $$$$RET; rm -f $$@ exit 1; fi
-endef
-
-$(eval $(call make-dll, Tizen.Network.IoTConnectivity, csapi-tizen))
-
-clean:
- @rm -f $(ASM_DLLS)
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<AssemblyName>Tizen.Network.IoTConnectivity</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile />
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
- <Reference Include="Tizen.Internals">
- <HintPath>..\..\tizen\Tizen.Internals\bin\Debug\Tizen.Internals.dll</HintPath>
- </Reference>
- <Reference Include="Tizen">
- <HintPath>..\..\tizen\Tizen\bin\Debug\Tizen.dll</HintPath>
- </Reference>
</ItemGroup>
<ItemGroup>
- <Compile Include="Tizen.Network.IoTConnectivity\Attributes.cs" />\r
+ <Compile Include="Tizen.Network.IoTConnectivity\Attributes.cs" />
<Compile Include="Tizen.Network.IoTConnectivity\CacheUpdatedEventArgs.cs" />
<Compile Include="Tizen.Network.IoTConnectivity\DeviceInformationFoundEventArgs.cs" />
<Compile Include="Tizen.Network.IoTConnectivity\FindingErrorOccurredEventArgs.cs" />
<ItemGroup>
<None Include="Tizen.Network.IoTConnectivity.snk" />
</ItemGroup>
+ <ItemGroup />
+ <ItemGroup>
+ <Reference Include="Tizen">
+ <PkgConfig>csapi-tizen</PkgConfig>
+ <HintPath>..\..\tizen\Tizen\obj\Debug\Tizen.dll</HintPath>
+ </Reference>
+ <Reference Include="Tizen.Internals">
+ <PkgConfig>csapi-tizen</PkgConfig>
+ <HintPath>..\..\tizen\Tizen.Internals\bin\Debug\Tizen.Internals.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\tizen\Tizen.Internals\Tizen.Internals.csproj">
+ <Project>{B9AA1CB2-F72D-4A30-A33B-A20C850A38A0}</Project>
+ <Name>Tizen.Internals</Name>
+ <Private>True</Private>
+ </ProjectReference>
+ <ProjectReference Include="..\..\tizen\Tizen\Tizen.csproj">
+ <Project>{7659CA59-410D-41A1-9841-586E88BC78C9}</Project>
+ <Name>Tizen</Name>
+ <Private>True</Private>
+ </ProjectReference>
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="AfterBuild">
</Target>
-->
-</Project>
+</Project>
\ No newline at end of file
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// Attributes represents current attributes of a resource
+ /// This class represents current attributes of a resource.
/// </summary>
public class Attributes : IDictionary<string, object>, IDisposable
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// CacheUpdatedEventArgs class. This class is an event arguments of the CacheUpdated event.
+ /// This class is an event arguments of the CacheUpdated event.
/// </summary>
public class CacheUpdatedEventArgs : EventArgs
{
+ internal CacheUpdatedEventArgs() { }
+
/// <summary>
/// Representation property.
/// </summary>
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// DeviceInformationFoundEventArgs class. This class is an event arguments of the DeviceInformationFound event.
+ /// This class is an event arguments of the DeviceInformationFound event.
/// </summary>
public class DeviceInformationFoundEventArgs
{
+ internal DeviceInformationFoundEventArgs() { }
+
/// <summary>
/// The request id
/// </summary>
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// FoundErrorEventArgs class. This class is an event arguments of the FoundError event.
+ /// This class is an event arguments of the FindingErrorOccurred event.
/// </summary>
public class FindingErrorOccurredEventArgs : EventArgs
{
+ internal FindingErrorOccurredEventArgs() { }
+
/// <summary>
/// RequestId property.
/// </summary>
namespace Tizen.Network.IoTConnectivity
{
+ /// <summary>
+ /// IoT connectivity client manager.
+ /// </summary>
public static class IoTConnectivityClientManager
{
public const string MulticastAddress = null;
}
s_presenceCallbacksMap[id] = (IntPtr presence, int result, IntPtr presenceResponseHandle, IntPtr userData) =>
{
- if (presenceResponseHandle != IntPtr.Zero)
+ int presenceId = (int)userData;
+ if (result == (int)IoTConnectivityError.None)
{
- int presenceId = (int)userData;
- if (result == 0)
+ if (presenceResponseHandle != IntPtr.Zero)
{
PresenceReceivedEventArgs e = GetPresenceReceivedEventArgs(presenceId, presenceResponseHandle);
if (e == null)
}
else
{
- FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(presenceId, result);
- FindingErrorOccurred?.Invoke(null, e);
+ Log.Error(IoTConnectivityErrorFactory.LogTag, "Handle is null");
+ return;
}
}
+ else
+ {
+ FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(presenceId, result);
+ FindingErrorOccurred?.Invoke(null, e);
+ }
};
IntPtr presenceHandle;
}
s_resourceFoundCallbacksMap[id] = (IntPtr remoteResourceHandle, int result, IntPtr userData) =>
{
- if (remoteResourceHandle != IntPtr.Zero)
+ int requestId = (int)userData;
+ if (result == (int)IoTConnectivityError.None)
{
- int requestId = (int)userData;
- if (result == (int)IoTConnectivityError.None)
+ if (remoteResourceHandle != IntPtr.Zero)
{
RemoteResource resource = null;
try
}
else
{
- FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(requestId, result);
- FindingErrorOccurred?.Invoke(null, e);
+ Log.Error(IoTConnectivityErrorFactory.LogTag, "Handle is null");
+ return;
+ }
+ }
+ else
+ {
+ FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(requestId, result);
+ FindingErrorOccurred?.Invoke(null, e);
- lock (s_resourceFoundCallbacksMap)
- {
- s_resourceFoundCallbacksMap.Remove(id);
- }
+ lock (s_resourceFoundCallbacksMap)
+ {
+ s_resourceFoundCallbacksMap.Remove(id);
}
}
};
}
s_deviceInformationCallbacksMap[id] = (IntPtr deviceInfoHandle, int result, IntPtr userData) =>
{
- if (deviceInfoHandle != IntPtr.Zero)
+ int requestId = (int)userData;
+ if (result == (int)IoTConnectivityError.None)
{
- int requestId = (int)userData;
- if (result == 0)
+ if (deviceInfoHandle != IntPtr.Zero)
{
DeviceInformationFoundEventArgs e = GetDeviceInformationFoundEventArgs(requestId, deviceInfoHandle);
if (e == null)
}
else
{
- FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(requestId, result);
- FindingErrorOccurred?.Invoke(null, e);
+ Log.Error(IoTConnectivityErrorFactory.LogTag, "Handle is null");
+ return;
+ }
+ }
+ else
+ {
+ FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(requestId, result);
+ FindingErrorOccurred?.Invoke(null, e);
- lock (s_deviceInformationCallbacksMap)
- {
- s_deviceInformationCallbacksMap.Remove(id);
- }
+ lock (s_deviceInformationCallbacksMap)
+ {
+ s_deviceInformationCallbacksMap.Remove(id);
}
}
};
}
s_platformInformationCallbacksMap[id] = (IntPtr platformInfoHandle, int result, IntPtr userData) =>
{
- if (platformInfoHandle != IntPtr.Zero)
+ int requestId = (int)userData;
+ if (result == (int)IoTConnectivityError.None)
{
- int requestId = (int)userData;
- if (result == 0)
+ if (platformInfoHandle != IntPtr.Zero)
{
PlatformInformationFoundEventArgs e = GetPlatformInformationFoundEventArgs(requestId, platformInfoHandle);
if (e == null)
}
else
{
- FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(requestId, result);
- FindingErrorOccurred?.Invoke(null, e);
+ Log.Error(IoTConnectivityErrorFactory.LogTag, "Handle is null");
+ return;
+ }
+ }
+ else
+ {
+ FindingErrorOccurredEventArgs e = GetFindingErrorOccurredEventArgs(requestId, result);
+ FindingErrorOccurred?.Invoke(null, e);
- lock (s_platformInformationCallbacksMap)
- {
- s_platformInformationCallbacksMap.Remove(id);
- }
+ lock (s_platformInformationCallbacksMap)
+ {
+ s_platformInformationCallbacksMap.Remove(id);
}
}
};
NotSupported = ErrorCode.NotSupported,
NoData = ErrorCode.NoData,
TimedOut = ErrorCode.TimedOut,
- // TODO: Fix IoTivity error mask
- Representation = 0x10700000 | 0x01,
- InvalidType = 0x10700000 | 0x02,
- Already = 0x10700000 | 0x03,
- System = 0x10700000 | 0x04,
+ Iotivity = -0x01C80000 | 0x01,
+ Representation = -0x01C80000 | 0x02,
+ InvalidType = -0x01C80000 | 0x03,
+ Already = -0x01C80000 | 0x04,
+ System = -0x01C80000 | 0x06,
}
internal static class IoTConnectivityErrorFactory
namespace Tizen.Network.IoTConnectivity
{
+ /// <summary>
+ /// Class represnets a lite resource.
+ /// </summary>
public class LiteResource : Resource
{
/// <summary>
/// </summary>
/// <param name="attribs">The new attributes of the lite resource</param>
/// <returns>true to accept post request, false to reject it</returns>
- public virtual bool OnPost(Attributes attribs)
+ protected virtual bool OnPost(Attributes attribs)
{
return true;
}
/// Called on the get event.
/// </summary>
/// <param name="request">Request.</param>
- public sealed override Response OnGet(Request request)
+ protected sealed override Response OnGet(Request request)
{
Representation representation = new Representation()
{
/// Called on the put event.
/// </summary>
/// <param name="request">Request.</param>
- public sealed override Response OnPut(Request request)
+ protected sealed override Response OnPut(Request request)
{
Response response = new Response();
response.Result = ResponseCode.Forbidden;
/// Called on the post event.
/// </summary>
/// <param name="request">Request.</param>
- public sealed override Response OnPost(Request request)
+ protected sealed override Response OnPost(Request request)
{
if (OnPost(request.Representation.Attributes))
{
/// Called on the delete event.
/// </summary>
/// <param name="request">Request.</param>
- public sealed override Response OnDelete(Request request)
+ protected sealed override Response OnDelete(Request request)
{
Response response = new Response();
response.Result = ResponseCode.Forbidden;
/// <param name="request">Request.</param>
/// <param name="observerType">Observer type</param>
/// <param name="observeId">Observe identifier.</param>
- public sealed override bool OnObserving(Request request, ObserveType observeType, int observeId)
+ protected sealed override bool OnObserving(Request request, ObserveType observeType, int observeId)
{
return true;
}
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// ObserverNotifiedEventArgs class. This class is an event arguments of the ObserverNotified event.
+ /// This class is an event arguments of the ObserverNotified event.
/// </summary>
public class ObserverNotifiedEventArgs : EventArgs
{
+ internal ObserverNotifiedEventArgs() { }
+
/// <summary>
/// Result property.
/// </summary>
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// PlatformInformationFoundEventArgs class. This class is an event arguments of the PlatformInformationFound event.
+ /// This class is an event arguments of the PlatformInformationFound event.
/// </summary>
public class PlatformInformationFoundEventArgs
{
+ internal PlatformInformationFoundEventArgs() { }
+
/// <summary>
/// The request id
/// </summary>
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// PresenceReceivedEventArgs class. This class is an event arguments of the PresenceReceived event.
+ /// This class is an event arguments of the PresenceReceived event.
/// </summary>
public class PresenceReceivedEventArgs : EventArgs
{
+ internal PresenceReceivedEventArgs() { }
+
/// <summary>
/// PresenceId property.
/// </summary>
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// RemoteResource class
+ /// This class represents a remote resource.
/// </summary>
public class RemoteResource : IDisposable
{
{
_responseCallbacksMap.Remove(responseCallbackId);
}
-
- if (responseHandle != IntPtr.Zero)
+ if (err == (int)(IoTConnectivityError.Iotivity))
+ {
+ RemoteResponse response = new RemoteResponse();
+ response.Result = ResponseCode.Forbidden;
+ response.Representation = null;
+ tcsRemoteResponse.TrySetResult(response);
+ }
+ else if (responseHandle != IntPtr.Zero)
{
try
{
tcsRemoteResponse.TrySetException(IoTConnectivityErrorFactory.GetException((int)IoTConnectivityError.System));
}
};
-
IntPtr queryHandle = (query == null) ? IntPtr.Zero : query._resourceQueryHandle;
int errCode = Interop.IoTConnectivity.Client.RemoteResource.Put(_remoteResourceHandle, representation._representationHandle, queryHandle, _responseCallbacksMap[id], id);
if (errCode != (int)IoTConnectivityError.None)
{
_responseCallbacksMap.Remove(responseCallbackId);
}
-
- if (responseHandle != IntPtr.Zero)
+ if (err == (int)(IoTConnectivityError.Iotivity))
+ {
+ RemoteResponse response = new RemoteResponse();
+ response.Result = ResponseCode.Forbidden;
+ response.Representation = null;
+ tcsRemoteResponse.TrySetResult(response);
+ }
+ else if (responseHandle != IntPtr.Zero)
{
try
{
Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to get device id");
throw IoTConnectivityErrorFactory.GetException(ret);
}
- IntPtr deviceName;
+ IntPtr deviceName;
ret = Interop.IoTConnectivity.Client.RemoteResource.GetDeviceName(_remoteResourceHandle, out deviceName);
if (ret != (int)IoTConnectivityError.None)
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// RemoteResponse Class
+ /// This class represents remote response.
/// </summary>
public class RemoteResponse
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// Class containing representation of a resource
+ /// Class containing representation of a resource.
/// </summary>
public class Representation : IDisposable
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// Class respresenting Request to a resource
+ /// Class respresenting request to a resource.
/// </summary>
public class Request : IDisposable
{
private bool _disposed = false;
+ internal Request()
+ {
+ }
+
~Request()
{
Dispose(false);
namespace Tizen.Network.IoTConnectivity
{
+ /// <summary>
+ /// Abstract class respresenting a resource.
+ /// </summary>
public abstract class Resource : IDisposable
{
private IntPtr _resourceHandle = IntPtr.Zero;
/// <param name="types">Resource types</param>
/// <param name="interfaces">Resource interfaces</param>
/// <param name="policy">Policy input of the resoruce</param>
- public Resource(string uri, ResourceTypes types, ResourceInterfaces interfaces, ResourcePolicy policy)
+ protected Resource(string uri, ResourceTypes types, ResourceInterfaces interfaces, ResourcePolicy policy)
{
UriPath = uri;
Types = types;
/// Called on the get event.
/// </summary>
/// <param name="request">Request.</param>
- public abstract Response OnGet(Request request);
+ protected abstract Response OnGet(Request request);
/// <summary>
/// Called on the put event.
/// </summary>
/// <param name="request">Request.</param>
- public abstract Response OnPut(Request request);
+ protected abstract Response OnPut(Request request);
/// <summary>
/// Called on the post event.
/// </summary>
/// <param name="request">Request.</param>
- public abstract Response OnPost(Request request);
+ protected abstract Response OnPost(Request request);
/// <summary>
/// Called on the delete event.
/// </summary>
/// <param name="request">Request.</param>
- public abstract Response OnDelete(Request request);
+ protected abstract Response OnDelete(Request request);
/// <summary>
/// Called on the observing event.
/// <param name="request">Request.</param>
/// <param name="policy">Policy.</param>
/// <param name="observeId">Observe identifier.</param>
- public abstract bool OnObserving(Request request, ObserveType type, int observeId);
+ protected abstract bool OnObserving(Request request, ObserveType type, int observeId);
public void Dispose()
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// ResourceFoundEventArgs class. This class is an event arguments of the ResourceFound event.
+ /// This class is an event arguments of the ResourceFound event.
/// </summary>
public class ResourceFoundEventArgs : EventArgs
{
+ internal ResourceFoundEventArgs() { }
+
/// <summary>
/// RequestId property.
/// </summary>
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// Class representing Resource options
+ /// This class represents resource options.
/// </summary>
public class ResourceOptions : IDictionary<ushort, string>, IDisposable
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// Class to manage query of request
+ /// Class to manage query of request.
/// </summary>
public class ResourceQuery : IDictionary<string, string>, IDisposable
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// Class representing Response from a resource
+ /// This class represents response from a resource.
/// </summary>
public class Response : IDisposable
{
namespace Tizen.Network.IoTConnectivity
{
/// <summary>
- /// StateChangedEventArgs class. This class is an event arguments of the StateChanged event.
+ /// This class is an event arguments of the StateChanged event.
/// </summary>
public class StateChangedEventArgs : EventArgs
{
+ internal StateChangedEventArgs() { }
+
/// <summary>
/// State property.
/// </summary>