{"action":"created","comment":{"url":"https://api.github.com/repos/zatar-iot/leshan/pulls/comments/33308628","id":33308628,"diff_hunk":"@@ -45,169 +54,311 @@\n  */\n public class LeshanClientBuilder {\n \n-    /** IANA assigned UDP port for CoAP (so for LWM2M) */\n-    public static final int PORT = 5683;\n-\n-    /** IANA assigned UDP port for CoAP with DTLS (so for LWM2M) */\n-    public static final int PORT_DTLS = 5684;\n-\n-    /** TCP port for TLS */\n-    public static final int PORT_TLS = 443;\n-\n-    private BindingMode bindingMode;\n-    private ObjectsInitializer initializer;\n-    private InetSocketAddress localAddress;\n-    private InetSocketAddress serverAddress;\n-    private final Set<SecurityMode> securityModes = new HashSet<SecurityMode>();\n-    private String pskIdentity;\n-    private byte[] pskKey;\n-    private PrivateKey privateKey;\n-    private PublicKey publicKey;\n-\n-    /**\n-     * Set the remote LW-M2M provider the client should connect to.\n-     * \n-     * @param remoteServer The particular LW-M2M provider to connect to it. If none is provided localhost:5683.\n-     * @return\n-     */\n-    public LeshanClientBuilder setServerAddress(InetSocketAddress serverAddress) {\n-        Validate.notNull(serverAddress);\n-\n-        this.serverAddress = serverAddress;\n-\n-        return this;\n-    }\n-\n-    /**\n-     * Add PSK authentication to the LW-M2M server.\n-     * \n-     * @param pskIdentity the PSK Identity to use.\n-     * @param pskKey the PSK key to use.\n-     * @return\n-     */\n-    public LeshanClientBuilder setPskSecurity(String pskIdentity, byte[] pskKey) {\n-        this.securityModes.add(SecurityMode.PSK);\n-        this.pskIdentity = pskIdentity;\n-        this.pskKey = pskKey;\n-\n-        return this;\n-    }\n-\n-    /**\n-     * Add RPK authentication to the LW-M2M server.\n-     * \n-     * @param clientPrivateKey the Private RPK key to use.\n-     * @param clientPublicKey thePublic RPK key to use.\n-     * @return\n-     */\n-    public LeshanClientBuilder setRpkSecurity(PrivateKey clientPrivateKey, PublicKey clientPublicKey) {\n-        this.securityModes.add(SecurityMode.RPK);\n-        this.privateKey = clientPrivateKey;\n-        this.publicKey = clientPublicKey;\n-\n-        return this;\n-    }\n-\n-    /**\n-     * Set the binding mode which the client should use to connect to the LW-M2M provider.\n-     * \n-     * @param bindingMode The particular binding mode as defined in the LW-M2M specification, section 5.2.1.1. If none\n-     *        is provided 'U' (UDP, no Queuing Mode, no SMS) shall be used.\n-     * @return\n-     */\n-    public LeshanClientBuilder setBindingMode(BindingMode bindingMode) {\n-        Validate.notNull(bindingMode);\n-        this.bindingMode = bindingMode;\n-\n-        return this;\n-    }\n-\n-    /**\n-     * Set the initializer used by the client to create objects, object instances and resources for the LW-M2M provider.\n-     * \n-     * @param initializer The particular initializer. If none is provided, a default initializer with default settings\n-     *        derived from the OMA LW-M2M JSON schema will be used.\n-     * @return\n-     */\n-    public LeshanClientBuilder setObjectsInitializer(ObjectsInitializer initializer) {\n-        Validate.notNull(initializer);\n-        this.initializer = initializer;\n-\n-        return this;\n-    }\n-\n-    /**\n-     * Set the local address the client expects the LW-M2M provider to communicate back upon.\n-     * \n-     * @param localAddress The particular address. If none is provided, localhost with a randomly assigned port will be\n-     *        used.\n-     * @return\n-     */\n-    public LeshanClientBuilder setLocalAddress(InetSocketAddress localAddress) {\n-        Validate.notNull(localAddress);\n-        this.localAddress = localAddress;\n-\n-        return this;\n-    }\n-\n-    /**\n-     * Build a Leshan client.\n-     * \n-     * @param objectId An array of Objects the given ObjectInitializer should create upon starting the leshan client. If\n-     *        none are provided, the mandatory object instances as specified in the OMA LW-M2M JSON schema will be\n-     *        created.\n-     * @return the Leshan client.\n-     */\n-    public LwM2mClient build(int... objectId) {\n-        if (localAddress == null)\n-            localAddress = new InetSocketAddress(\"0\", 0);\n-        if (serverAddress == null)\n-            serverAddress = new InetSocketAddress(\"0\", PORT);\n-        if (bindingMode == null)\n-            bindingMode = BindingMode.U;\n-        if (initializer == null)\n-            initializer = new ObjectsInitializer();\n-        if (securityModes.isEmpty())\n-            securityModes.add(SecurityMode.NO_SEC);\n-        if (objectId == null)\n-            objectId = new int[] {};\n-\n-        List<ObjectEnabler> objects = objectId.length == 0 ? initializer.createMandatory() : initializer\n-                .create(objectId);\n-\n-        Endpoint endpoint;\n-\n-        switch (bindingMode) {\n-        case T:\n-            endpoint = TCPEndpoint.getNewTcpEndpointBuilder().setAsTcpClient()\n-                    .setRemoteAddress(serverAddress.getHostName()).setPort(serverAddress.getPort()).buildTcpEndpoint();\n-            break;\n-        case U:\n-            if (securityModes.contains(SecurityMode.NO_SEC)) {\n-                endpoint = new CoAPEndpoint(localAddress);\n-            } else {\n-                DTLSConnector dtlsConnector = new DTLSConnector(localAddress);\n-\n-                if (securityModes.contains(SecurityMode.PSK)) {\n-                    // TODO The preferred CipherSuite should not be necessary, if I only set the PSK (scandium bug ?)\n-                    dtlsConnector.getConfig().setPreferredCipherSuite(CipherSuite.TLS_PSK_WITH_AES_128_CCM_8);\n-                    dtlsConnector.getConfig().setPskStore(new StaticPskStore(pskIdentity, pskKey));\n-                }\n-                if (securityModes.contains(SecurityMode.RPK)) {\n-                    // TODO The preferred CipherSuite should not be necessary, if I only set the PSK (scandium bug ?)\n-                    dtlsConnector.getConfig().setPreferredCipherSuite(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8);\n-                    dtlsConnector.getConfig().setPrivateKey(privateKey, publicKey);\n-                }\n-\n-                endpoint = new CoAPEndpoint(dtlsConnector, NetworkConfig.getStandard());\n-            }\n-            break;\n-        default:\n-            throw new IllegalArgumentException(\"Leshan Client does not currently support the selected BindingMode \"\n-                    + bindingMode);\n-        }\n-\n-        return new LeshanClient(endpoint, serverAddress, new ArrayList<LwM2mObjectEnabler>(objects));\n-    }\n+\t/** IANA assigned UDP port for CoAP (so for LWM2M) */\n+\tpublic static final int PORT = 5683;\n+\n+\t/** IANA assigned UDP port for CoAP with DTLS (so for LWM2M) */\n+\tpublic static final int PORT_DTLS = 5684;\n+\n+\t/** TCP port for TLS */\n+\tpublic static final int PORT_TLS = 443;\n+\n+\tprivate final Set<BindingMode> bindingMode = EnumSet.noneOf(BindingMode.class);\n+\tprivate ObjectsInitializer initializer;\n+\tprivate InetSocketAddress localAddress;\n+\tprivate InetSocketAddress serverAddress;\n+\tprivate TCPConfigBuilder tcpConfiguration;\n+\tprivate DTLSConfigBuilder dtlsConfigBuilder;\n+\n+\n+\t/**\n+\t * Set the remote LW-M2M provider the client should connect to.\n+\t * \n+\t * @param remoteServer The particular LW-M2M provider to connect to it. If none is provided localhost:5683.\n+\t * @return\n+\t */\n+\tpublic LeshanClientBuilder setServerAddress(final InetSocketAddress serverAddress) {\n+\t\tValidate.notNull(serverAddress);\n+\t\tthis.serverAddress = serverAddress;\n+\n+\t\treturn this;\n+\t}\n+\n+\tpublic TCPConfigBuilder addBindingModeTCPClient() {\n+\t\tbindingMode.add(BindingMode.C);\n+\t\tthis.tcpConfiguration = new TCPConfigBuilder(this);\n+\t\treturn tcpConfiguration;\n+\t}\n+\n+\tpublic DTLSConfigBuilder addBindingModeUDP() {\n+\t\tbindingMode.add(BindingMode.U);\n+\t\tthis.dtlsConfigBuilder = new DTLSConfigBuilder(this);\n+\t\treturn dtlsConfigBuilder;\n+\t}\n+\n+\tpublic LeshanClientBuilder addBindingModeSMS() {\n+\t\tbindingMode.add(BindingMode.S);\n+\t\treturn this;\n+\t}\n+\n+\tpublic LeshanClientBuilder addBindingModeQueue() {\n+\t\tbindingMode.add(BindingMode.Q);\n+\t\treturn this;\n+\t}\n+\n+\t/**\n+\t * Set the initializer used by the client to create objects, object instances and resources for the LW-M2M provider.\n+\t * \n+\t * @param initializer The particular initializer. If none is provided, a default initializer with default settings\n+\t *        derived from the OMA LW-M2M JSON schema will be used.\n+\t * @return\n+\t */\n+\tpublic LeshanClientBuilder setObjectsInitializer(final ObjectsInitializer initializer) {\n+\t\tValidate.notNull(initializer);\n+\t\tthis.initializer = initializer;\n+\n+\t\treturn this;\n+\t}\n+\n+\t/**\n+\t * Set the local address the client expects the LW-M2M provider to communicate back upon.\n+\t * \n+\t * @param localAddress The particular address. If none is provided, localhost with a randomly assigned port will be\n+\t *        used.\n+\t * @return\n+\t */\n+\tpublic LeshanClientBuilder setLocalAddress(final InetSocketAddress localAddress) {\n+\t\tValidate.notNull(localAddress);\n+\t\tthis.localAddress = localAddress;\n+\n+\t\treturn this;\n+\t}\n+\n+\t/**\n+\t * Build a Leshan client.\n+\t * \n+\t * @param objectId An array of Objects the given ObjectInitializer should create upon starting the leshan client. If\n+\t *        none are provided, the mandatory object instances as specified in the OMA LW-M2M JSON schema will be\n+\t *        created.\n+\t * @return the Leshan client.\n+\t */\n+\tpublic LwM2mClient build(int... objectId) {\n+\t\tif (localAddress == null)\n+\t\t\tlocalAddress = new InetSocketAddress(\"0\", 0);\n+\t\tif (serverAddress == null)\n+\t\t\tserverAddress = new InetSocketAddress(\"0\", PORT);\n+\t\tif (bindingMode.isEmpty())\n+\t\t\tbindingMode.add(BindingMode.U);\n+\t\tif (initializer == null)\n+\t\t\tinitializer = new ObjectsInitializer();\n+\t\tif (dtlsConfigBuilder == null) {\n+\t\t\tdtlsConfigBuilder = new DTLSConfigBuilder(this);\n+\t\t\tdtlsConfigBuilder.noSec();\n+\t\t}\n+\t\tif (objectId == null)\n+\t\t\tobjectId = new int[] {};\n+\n+\t\tfinal List<ObjectEnabler> objects = objectId.length == 0 ? initializer.createMandatory() : initializer","path":"leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClientBuilder.java","position":300,"original_position":300,"commit_id":"13a568eaef2b881375a440608282fe3d50f0fe99","original_commit_id":"13a568eaef2b881375a440608282fe3d50f0fe99","user":{"login":"Areontar","id":2413363,"avatar_url":"https://avatars.githubusercontent.com/u/2413363?v=3","gravatar_id":"","url":"https://api.github.com/users/Areontar","html_url":"https://github.com/Areontar","followers_url":"https://api.github.com/users/Areontar/followers","following_url":"https://api.github.com/users/Areontar/following{/other_user}","gists_url":"https://api.github.com/users/Areontar/gists{/gist_id}","starred_url":"https://api.github.com/users/Areontar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Areontar/subscriptions","organizations_url":"https://api.github.com/users/Areontar/orgs","repos_url":"https://api.github.com/users/Areontar/repos","events_url":"https://api.github.com/users/Areontar/events{/privacy}","received_events_url":"https://api.github.com/users/Areontar/received_events","type":"User","site_admin":false},"body":"client builder will be redone anyways","created_at":"2015-06-25T21:44:21Z","updated_at":"2015-06-25T21:44:21Z","html_url":"https://github.com/zatar-iot/leshan/pull/2#discussion_r33308628","pull_request_url":"https://api.github.com/repos/zatar-iot/leshan/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/zatar-iot/leshan/pulls/comments/33308628"},"html":{"href":"https://github.com/zatar-iot/leshan/pull/2#discussion_r33308628"},"pull_request":{"href":"https://api.github.com/repos/zatar-iot/leshan/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/zatar-iot/leshan/pulls/2","id":37739644,"html_url":"https://github.com/zatar-iot/leshan/pull/2","diff_url":"https://github.com/zatar-iot/leshan/pull/2.diff","patch_url":"https://github.com/zatar-iot/leshan/pull/2.patch","issue_url":"https://api.github.com/repos/zatar-iot/leshan/issues/2","number":2,"state":"open","locked":false,"title":"Impl tls","user":{"login":"Areontar","id":2413363,"avatar_url":"https://avatars.githubusercontent.com/u/2413363?v=3","gravatar_id":"","url":"https://api.github.com/users/Areontar","html_url":"https://github.com/Areontar","followers_url":"https://api.github.com/users/Areontar/followers","following_url":"https://api.github.com/users/Areontar/following{/other_user}","gists_url":"https://api.github.com/users/Areontar/gists{/gist_id}","starred_url":"https://api.github.com/users/Areontar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Areontar/subscriptions","organizations_url":"https://api.github.com/users/Areontar/orgs","repos_url":"https://api.github.com/users/Areontar/repos","events_url":"https://api.github.com/users/Areontar/events{/privacy}","received_events_url":"https://api.github.com/users/Areontar/received_events","type":"User","site_admin":false},"body":"wiring tls into leshan","created_at":"2015-06-15T21:52:34Z","updated_at":"2015-06-25T21:44:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"875f319b4f25a1e05a0edbb5932621fe546be55d","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/zatar-iot/leshan/pulls/2/commits","review_comments_url":"https://api.github.com/repos/zatar-iot/leshan/pulls/2/comments","review_comment_url":"https://api.github.com/repos/zatar-iot/leshan/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zatar-iot/leshan/issues/2/comments","statuses_url":"https://api.github.com/repos/zatar-iot/leshan/statuses/13a568eaef2b881375a440608282fe3d50f0fe99","head":{"label":"zatar-iot:impl_tls","ref":"impl_tls","sha":"13a568eaef2b881375a440608282fe3d50f0fe99","user":{"login":"zatar-iot","id":7365347,"avatar_url":"https://avatars.githubusercontent.com/u/7365347?v=3","gravatar_id":"","url":"https://api.github.com/users/zatar-iot","html_url":"https://github.com/zatar-iot","followers_url":"https://api.github.com/users/zatar-iot/followers","following_url":"https://api.github.com/users/zatar-iot/following{/other_user}","gists_url":"https://api.github.com/users/zatar-iot/gists{/gist_id}","starred_url":"https://api.github.com/users/zatar-iot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zatar-iot/subscriptions","organizations_url":"https://api.github.com/users/zatar-iot/orgs","repos_url":"https://api.github.com/users/zatar-iot/repos","events_url":"https://api.github.com/users/zatar-iot/events{/privacy}","received_events_url":"https://api.github.com/users/zatar-iot/received_events","type":"Organization","site_admin":false},"repo":{"id":35633093,"name":"leshan","full_name":"zatar-iot/leshan","owner":{"login":"zatar-iot","id":7365347,"avatar_url":"https://avatars.githubusercontent.com/u/7365347?v=3","gravatar_id":"","url":"https://api.github.com/users/zatar-iot","html_url":"https://github.com/zatar-iot","followers_url":"https://api.github.com/users/zatar-iot/followers","following_url":"https://api.github.com/users/zatar-iot/following{/other_user}","gists_url":"https://api.github.com/users/zatar-iot/gists{/gist_id}","starred_url":"https://api.github.com/users/zatar-iot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zatar-iot/subscriptions","organizations_url":"https://api.github.com/users/zatar-iot/orgs","repos_url":"https://api.github.com/users/zatar-iot/repos","events_url":"https://api.github.com/users/zatar-iot/events{/privacy}","received_events_url":"https://api.github.com/users/zatar-iot/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zatar-iot/leshan","description":"Leshan is an OMA Lightweight M2M (LWM2M) implementation in Java.","fork":true,"url":"https://api.github.com/repos/zatar-iot/leshan","forks_url":"https://api.github.com/repos/zatar-iot/leshan/forks","keys_url":"https://api.github.com/repos/zatar-iot/leshan/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zatar-iot/leshan/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zatar-iot/leshan/teams","hooks_url":"https://api.github.com/repos/zatar-iot/leshan/hooks","issue_events_url":"https://api.github.com/repos/zatar-iot/leshan/issues/events{/number}","events_url":"https://api.github.com/repos/zatar-iot/leshan/events","assignees_url":"https://api.github.com/repos/zatar-iot/leshan/assignees{/user}","branches_url":"https://api.github.com/repos/zatar-iot/leshan/branches{/branch}","tags_url":"https://api.github.com/repos/zatar-iot/leshan/tags","blobs_url":"https://api.github.com/repos/zatar-iot/leshan/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zatar-iot/leshan/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zatar-iot/leshan/git/refs{/sha}","trees_url":"https://api.github.com/repos/zatar-iot/leshan/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zatar-iot/leshan/statuses/{sha}","languages_url":"https://api.github.com/repos/zatar-iot/leshan/languages","stargazers_url":"https://api.github.com/repos/zatar-iot/leshan/stargazers","contributors_url":"https://api.github.com/repos/zatar-iot/leshan/contributors","subscribers_url":"https://api.github.com/repos/zatar-iot/leshan/subscribers","subscription_url":"https://api.github.com/repos/zatar-iot/leshan/subscription","commits_url":"https://api.github.com/repos/zatar-iot/leshan/commits{/sha}","git_commits_url":"https://api.github.com/repos/zatar-iot/leshan/git/commits{/sha}","comments_url":"https://api.github.com/repos/zatar-iot/leshan/comments{/number}","issue_comment_url":"https://api.github.com/repos/zatar-iot/leshan/issues/comments{/number}","contents_url":"https://api.github.com/repos/zatar-iot/leshan/contents/{+path}","compare_url":"https://api.github.com/repos/zatar-iot/leshan/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zatar-iot/leshan/merges","archive_url":"https://api.github.com/repos/zatar-iot/leshan/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zatar-iot/leshan/downloads","issues_url":"https://api.github.com/repos/zatar-iot/leshan/issues{/number}","pulls_url":"https://api.github.com/repos/zatar-iot/leshan/pulls{/number}","milestones_url":"https://api.github.com/repos/zatar-iot/leshan/milestones{/number}","notifications_url":"https://api.github.com/repos/zatar-iot/leshan/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zatar-iot/leshan/labels{/name}","releases_url":"https://api.github.com/repos/zatar-iot/leshan/releases{/id}","created_at":"2015-05-14T19:49:08Z","updated_at":"2015-05-14T19:49:09Z","pushed_at":"2015-06-24T20:38:10Z","git_url":"git://github.com/zatar-iot/leshan.git","ssh_url":"git@github.com:zatar-iot/leshan.git","clone_url":"https://github.com/zatar-iot/leshan.git","svn_url":"https://github.com/zatar-iot/leshan","homepage":null,"size":1422,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"zatar-iot:tcp-integration","ref":"tcp-integration","sha":"382f9a1f7805184a9721868bc9b7bf471dc51152","user":{"login":"zatar-iot","id":7365347,"avatar_url":"https://avatars.githubusercontent.com/u/7365347?v=3","gravatar_id":"","url":"https://api.github.com/users/zatar-iot","html_url":"https://github.com/zatar-iot","followers_url":"https://api.github.com/users/zatar-iot/followers","following_url":"https://api.github.com/users/zatar-iot/following{/other_user}","gists_url":"https://api.github.com/users/zatar-iot/gists{/gist_id}","starred_url":"https://api.github.com/users/zatar-iot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zatar-iot/subscriptions","organizations_url":"https://api.github.com/users/zatar-iot/orgs","repos_url":"https://api.github.com/users/zatar-iot/repos","events_url":"https://api.github.com/users/zatar-iot/events{/privacy}","received_events_url":"https://api.github.com/users/zatar-iot/received_events","type":"Organization","site_admin":false},"repo":{"id":35633093,"name":"leshan","full_name":"zatar-iot/leshan","owner":{"login":"zatar-iot","id":7365347,"avatar_url":"https://avatars.githubusercontent.com/u/7365347?v=3","gravatar_id":"","url":"https://api.github.com/users/zatar-iot","html_url":"https://github.com/zatar-iot","followers_url":"https://api.github.com/users/zatar-iot/followers","following_url":"https://api.github.com/users/zatar-iot/following{/other_user}","gists_url":"https://api.github.com/users/zatar-iot/gists{/gist_id}","starred_url":"https://api.github.com/users/zatar-iot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zatar-iot/subscriptions","organizations_url":"https://api.github.com/users/zatar-iot/orgs","repos_url":"https://api.github.com/users/zatar-iot/repos","events_url":"https://api.github.com/users/zatar-iot/events{/privacy}","received_events_url":"https://api.github.com/users/zatar-iot/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zatar-iot/leshan","description":"Leshan is an OMA Lightweight M2M (LWM2M) implementation in Java.","fork":true,"url":"https://api.github.com/repos/zatar-iot/leshan","forks_url":"https://api.github.com/repos/zatar-iot/leshan/forks","keys_url":"https://api.github.com/repos/zatar-iot/leshan/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zatar-iot/leshan/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zatar-iot/leshan/teams","hooks_url":"https://api.github.com/repos/zatar-iot/leshan/hooks","issue_events_url":"https://api.github.com/repos/zatar-iot/leshan/issues/events{/number}","events_url":"https://api.github.com/repos/zatar-iot/leshan/events","assignees_url":"https://api.github.com/repos/zatar-iot/leshan/assignees{/user}","branches_url":"https://api.github.com/repos/zatar-iot/leshan/branches{/branch}","tags_url":"https://api.github.com/repos/zatar-iot/leshan/tags","blobs_url":"https://api.github.com/repos/zatar-iot/leshan/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zatar-iot/leshan/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zatar-iot/leshan/git/refs{/sha}","trees_url":"https://api.github.com/repos/zatar-iot/leshan/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zatar-iot/leshan/statuses/{sha}","languages_url":"https://api.github.com/repos/zatar-iot/leshan/languages","stargazers_url":"https://api.github.com/repos/zatar-iot/leshan/stargazers","contributors_url":"https://api.github.com/repos/zatar-iot/leshan/contributors","subscribers_url":"https://api.github.com/repos/zatar-iot/leshan/subscribers","subscription_url":"https://api.github.com/repos/zatar-iot/leshan/subscription","commits_url":"https://api.github.com/repos/zatar-iot/leshan/commits{/sha}","git_commits_url":"https://api.github.com/repos/zatar-iot/leshan/git/commits{/sha}","comments_url":"https://api.github.com/repos/zatar-iot/leshan/comments{/number}","issue_comment_url":"https://api.github.com/repos/zatar-iot/leshan/issues/comments{/number}","contents_url":"https://api.github.com/repos/zatar-iot/leshan/contents/{+path}","compare_url":"https://api.github.com/repos/zatar-iot/leshan/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zatar-iot/leshan/merges","archive_url":"https://api.github.com/repos/zatar-iot/leshan/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zatar-iot/leshan/downloads","issues_url":"https://api.github.com/repos/zatar-iot/leshan/issues{/number}","pulls_url":"https://api.github.com/repos/zatar-iot/leshan/pulls{/number}","milestones_url":"https://api.github.com/repos/zatar-iot/leshan/milestones{/number}","notifications_url":"https://api.github.com/repos/zatar-iot/leshan/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zatar-iot/leshan/labels{/name}","releases_url":"https://api.github.com/repos/zatar-iot/leshan/releases{/id}","created_at":"2015-05-14T19:49:08Z","updated_at":"2015-05-14T19:49:09Z","pushed_at":"2015-06-24T20:38:10Z","git_url":"git://github.com/zatar-iot/leshan.git","ssh_url":"git@github.com:zatar-iot/leshan.git","clone_url":"https://github.com/zatar-iot/leshan.git","svn_url":"https://github.com/zatar-iot/leshan","homepage":null,"size":1422,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zatar-iot/leshan/pulls/2"},"html":{"href":"https://github.com/zatar-iot/leshan/pull/2"},"issue":{"href":"https://api.github.com/repos/zatar-iot/leshan/issues/2"},"comments":{"href":"https://api.github.com/repos/zatar-iot/leshan/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/zatar-iot/leshan/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/zatar-iot/leshan/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zatar-iot/leshan/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/zatar-iot/leshan/statuses/13a568eaef2b881375a440608282fe3d50f0fe99"}}}}