{"action":"created","comment":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/97047500","pull_request_review_id":17649879,"id":97047500,"diff_hunk":"@@ -0,0 +1,277 @@\n+/*\n+ * Copyright (C) 2015 Simon Brummer\n+ *\n+ * This file is subject to the terms and conditions of the GNU Lesser\n+ * General Public License v2.1. See the file LICENSE in the top level\n+ * directory for more details.\n+ */\n+\n+/**\n+ * @ingroup     net_gnrc\n+ * @{\n+ *\n+ * @file\n+ * @brief       GNRC's TCP event processing loop\n+ *\n+ * @author      Simon Brummer <brummer.simon@googlemail.com>\n+ * @}\n+ */\n+\n+#include <utlist.h>\n+#include <errno.h>\n+#include \"net/af.h\"\n+#include \"net/gnrc/pkt.h\"\n+#include \"net/gnrc/tcp.h\"\n+#include \"net/gnrc/tcp/hdr.h\"\n+#include \"internal/pkt.h\"\n+#include \"internal/fsm.h\"\n+#include \"internal/helper.h\"\n+#include \"internal/option.h\"\n+#include \"internal/eventloop.h\"\n+\n+#ifdef MODULE_GNRC_IPV6\n+#include \"net/gnrc/ipv6.h\"\n+#endif\n+\n+#define ENABLE_DEBUG (0)\n+#include \"debug.h\"\n+\n+/**\n+ * @brief send function, used to pass paket down the network stack\n+ *\n+ * @param[in] pkt   paket to pass down the network stack\n+ *\n+ * @return   zero on success\n+ * @return   negative value on error\n+ * @return   -EBADMSG if tcp header is missing\n+ */\n+static int _send(gnrc_pktsnip_t *pkt)\n+{\n+    /* NOTE: Sending Direction: pkt = nw, nw->next = tcp, tcp->next = payload */\n+    gnrc_pktsnip_t *tcp;\n+\n+    /* Search for tcp header */\n+    LL_SEARCH_SCALAR(pkt, tcp, type, GNRC_NETTYPE_TCP);\n+    if (tcp == NULL) {\n+        DEBUG(\"gnrc_tcp_eventloop : _send() : tcp header missing.\\n\");\n+        gnrc_pktbuf_release(pkt);\n+        return -EBADMSG;\n+    }\n+\n+    /* Dispatch to network layer */\n+    if (!gnrc_netapi_dispatch_send(pkt->type, GNRC_NETREG_DEMUX_CTX_ALL, pkt)) {\n+        DEBUG(\"gnrc_tcp_eventloop : _send() : network layer not found\\n\");\n+        gnrc_pktbuf_release(pkt);\n+    }\n+    return 0;\n+}\n+\n+/**\n+ * @brief recv function, used to call fsm on packet reception\n+ *\n+ * @param[in] pkt   incomming paket to process\n+ *\n+ * @return zero on success\n+ * @return negative value on error\n+ * @return -EACCES if not able to get write access to packet\n+ * @return -ERANGE if segment offset is less than 5\n+ * @return -ENOMSG if paket can't be marked\n+ * @return -EINVAL if checksum was invalid\n+ * @return -ENOTCONN if no module is interested in this context\n+ */\n+static int _receive(gnrc_pktsnip_t *pkt)\n+{\n+    /* NOTE: Receiving direction: pkt = payload, payload->next = tcp, tcp->next = nw */\n+    uint16_t ctl = 0;\n+    uint16_t src = 0;\n+    uint16_t dst = 0;\n+    uint8_t hdr_size = 0;\n+    uint8_t syn = 0;\n+    gnrc_pktsnip_t *ip = NULL;\n+    gnrc_pktsnip_t *reset = NULL;\n+    gnrc_tcp_tcb_t *tcb = NULL;\n+    tcp_hdr_t *hdr;\n+\n+    /* Mark TCP header */\n+    gnrc_pktsnip_t *tcp = gnrc_pktbuf_start_write(pkt);\n+    if (tcp == NULL) {\n+        DEBUG(\"gnrc_tcp_eventloop.c : _receive() : can't write to packet\\n\");\n+        gnrc_pktbuf_release(pkt);\n+        return -EACCES;\n+    }\n+    pkt = tcp;\n+\n+#ifdef MODULE_GNRC_IPV6\n+    /* Get IP Header, discard packet if doesn't contain an ip header */\n+    LL_SEARCH_SCALAR(pkt, ip, type, GNRC_NETTYPE_IPV6);\n+    if (ip == NULL) {\n+        DEBUG(\"gnrc_tcp_eventloop.c : _receive() : pkt contains no IP Header\\n\");\n+        gnrc_pktbuf_release(pkt);\n+        return 0;\n+    }\n+#endif\n+\n+    /* Get TCP Header */\n+    LL_SEARCH_SCALAR(pkt, tcp, type, GNRC_NETTYPE_TCP);\n+    if (tcp == NULL) {\n+      DEBUG(\"gnrc_tcp_eventloop.c : _receive() : pkt contains no TCP Header\\n\");\n+      gnrc_pktbuf_release(pkt);\n+      return 0;\n+    }\n+\n+    /* Extract control bits */\n+    hdr = (tcp_hdr_t *)tcp->data;\n+    ctl = byteorder_ntohs(hdr->off_ctl);\n+\n+    /* Validate Offset */\n+    if (GET_OFFSET(ctl) < OPTION_OFFSET_BASE) {\n+        DEBUG(\"gnrc_tcp_eventloop.c : _receive() : unexpected Offset Value\\n\");\n+        gnrc_pktbuf_release(pkt);\n+        return -ERANGE;\n+    }\n+\n+    /* Calculate tcp header size */\n+    hdr_size = GET_OFFSET(ctl) * 4;\n+\n+    /* Mark TCP-Header, if it contains any payload */\n+    if ((pkt->type == GNRC_NETTYPE_TCP) && (pkt->size != hdr_size)) {\n+        tcp = gnrc_pktbuf_mark(pkt, hdr_size, GNRC_NETTYPE_TCP);\n+        if (tcp == NULL) {\n+            DEBUG(\"gnrc_tcp_eventloop.c : _receive() : Header marking failed\\n\");\n+            gnrc_pktbuf_release(pkt);\n+            return -ENOMSG;\n+        }\n+        pkt->type = GNRC_NETTYPE_UNDEF;\n+    }\n+\n+    /* Validate Checksum */\n+    if (byteorder_ntohs(hdr->checksum) != _pkt_calc_csum(tcp, ip, pkt)) {\n+        DEBUG(\"gnrc_tcp_eventloop.c : _receive() : Invalid checksum\\n\");\n+        gnrc_pktbuf_release(pkt);\n+        return -EINVAL;\n+    }\n+\n+    /* De-multiplex connection */\n+    syn = ((ctl & MSK_SYN_ACK) == MSK_SYN);\n+    src = byteorder_ntohs(hdr->src_port);\n+    dst = byteorder_ntohs(hdr->dst_port);\n+\n+    /* Find tcb to de-multiplex this packet to */\n+    mutex_lock(&_list_gnrc_tcp_tcb_lock);\n+    tcb = _list_gnrc_tcp_tcb_head;\n+    while (tcb) {\n+#ifdef MODULE_GNRC_IPV6","path":"sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c","position":163,"original_position":163,"commit_id":"c9fd65190d6aaa31e001375c60c7fd3cfa4d9337","original_commit_id":"c9fd65190d6aaa31e001375c60c7fd3cfa4d9337","user":{"login":"smlng","id":10532675,"avatar_url":"https://avatars.githubusercontent.com/u/10532675?v=3","gravatar_id":"","url":"https://api.github.com/users/smlng","html_url":"https://github.com/smlng","followers_url":"https://api.github.com/users/smlng/followers","following_url":"https://api.github.com/users/smlng/following{/other_user}","gists_url":"https://api.github.com/users/smlng/gists{/gist_id}","starred_url":"https://api.github.com/users/smlng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smlng/subscriptions","organizations_url":"https://api.github.com/users/smlng/orgs","repos_url":"https://api.github.com/users/smlng/repos","events_url":"https://api.github.com/users/smlng/events{/privacy}","received_events_url":"https://api.github.com/users/smlng/received_events","type":"User","site_admin":false},"body":"Okay I found the issue: parsing of the destination port fails, because you change pointers.\r\n\r\nMove:\r\n\r\n```\r\nsrc = byteorder_ntohs(hdr->src_port);\r\ndst = byteorder_ntohs(hdr->dst_port);\r\n```\r\n \r\nupwards, e.g. directly below\r\n\r\n```\r\nhdr = (tcp_hdr_t *)tcp->data;\r\nctl = byteorder_ntohs(hdr->off_ctl);\r\n```\r\n\r\nThe problem is that `hdr = tcp->data` hence `hdr->dst_port = tcp->data->dst_port`, but when you mark the tcp header in L138 you change the pointer, that way `hdr` isn't where it should be anymore.\r\n","created_at":"2017-01-20T10:34:13Z","updated_at":"2017-01-20T10:34:13Z","html_url":"https://github.com/RIOT-OS/RIOT/pull/4744#discussion_r97047500","pull_request_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744","_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/97047500"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/4744#discussion_r97047500"},"pull_request":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744"}}},"pull_request":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744","id":58288429,"html_url":"https://github.com/RIOT-OS/RIOT/pull/4744","diff_url":"https://github.com/RIOT-OS/RIOT/pull/4744.diff","patch_url":"https://github.com/RIOT-OS/RIOT/pull/4744.patch","issue_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4744","number":4744,"state":"open","locked":false,"title":"gnrc_tcp: initial implementation","user":{"login":"brummer-simon","id":3950119,"avatar_url":"https://avatars.githubusercontent.com/u/3950119?v=3","gravatar_id":"","url":"https://api.github.com/users/brummer-simon","html_url":"https://github.com/brummer-simon","followers_url":"https://api.github.com/users/brummer-simon/followers","following_url":"https://api.github.com/users/brummer-simon/following{/other_user}","gists_url":"https://api.github.com/users/brummer-simon/gists{/gist_id}","starred_url":"https://api.github.com/users/brummer-simon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brummer-simon/subscriptions","organizations_url":"https://api.github.com/users/brummer-simon/orgs","repos_url":"https://api.github.com/users/brummer-simon/repos","events_url":"https://api.github.com/users/brummer-simon/events{/privacy}","received_events_url":"https://api.github.com/users/brummer-simon/received_events","type":"User","site_admin":false},"body":"TCP implementation for gnrc. \r\nThere are still a lot do, so this pull request is for referential purposes. \r\n\r\nCurrent todo list:\r\n1. ~~Zero Window Probing~~\r\n2. ~~Adaptive Transamission Times (Retransmission time is currently a constant)~~\r\n3. ~~Sequence Number Overflow detection~~\r\n4. ~~Piggybagging pending data on acknowledgements~~ (Not part of initial release)\r\n5. ~~Implementation of conn interface~~ (Not part of initial release)\r\n6. ~~Final overhaul (Doc and Code)~~\r\n7. Testing (native and hardware)\r\n","created_at":"2016-02-04T13:49:49Z","updated_at":"2017-01-20T10:34:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7139fa3d65ef1d98c6a725253cbc666d14e3d1bd","assignee":{"login":"cgundogan","id":739129,"avatar_url":"https://avatars.githubusercontent.com/u/739129?v=3","gravatar_id":"","url":"https://api.github.com/users/cgundogan","html_url":"https://github.com/cgundogan","followers_url":"https://api.github.com/users/cgundogan/followers","following_url":"https://api.github.com/users/cgundogan/following{/other_user}","gists_url":"https://api.github.com/users/cgundogan/gists{/gist_id}","starred_url":"https://api.github.com/users/cgundogan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgundogan/subscriptions","organizations_url":"https://api.github.com/users/cgundogan/orgs","repos_url":"https://api.github.com/users/cgundogan/repos","events_url":"https://api.github.com/users/cgundogan/events{/privacy}","received_events_url":"https://api.github.com/users/cgundogan/received_events","type":"User","site_admin":false},"assignees":[{"login":"cgundogan","id":739129,"avatar_url":"https://avatars.githubusercontent.com/u/739129?v=3","gravatar_id":"","url":"https://api.github.com/users/cgundogan","html_url":"https://github.com/cgundogan","followers_url":"https://api.github.com/users/cgundogan/followers","following_url":"https://api.github.com/users/cgundogan/following{/other_user}","gists_url":"https://api.github.com/users/cgundogan/gists{/gist_id}","starred_url":"https://api.github.com/users/cgundogan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgundogan/subscriptions","organizations_url":"https://api.github.com/users/cgundogan/orgs","repos_url":"https://api.github.com/users/cgundogan/repos","events_url":"https://api.github.com/users/cgundogan/events{/privacy}","received_events_url":"https://api.github.com/users/cgundogan/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/16","html_url":"https://github.com/RIOT-OS/RIOT/milestone/16","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/16/labels","id":2079772,"number":16,"title":"Release 2017.01","description":"","creator":{"login":"miri64","id":675644,"avatar_url":"https://avatars.githubusercontent.com/u/675644?v=3","gravatar_id":"","url":"https://api.github.com/users/miri64","html_url":"https://github.com/miri64","followers_url":"https://api.github.com/users/miri64/followers","following_url":"https://api.github.com/users/miri64/following{/other_user}","gists_url":"https://api.github.com/users/miri64/gists{/gist_id}","starred_url":"https://api.github.com/users/miri64/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miri64/subscriptions","organizations_url":"https://api.github.com/users/miri64/orgs","repos_url":"https://api.github.com/users/miri64/repos","events_url":"https://api.github.com/users/miri64/events{/privacy}","received_events_url":"https://api.github.com/users/miri64/received_events","type":"User","site_admin":false},"open_issues":210,"closed_issues":191,"state":"open","created_at":"2016-10-19T12:20:59Z","updated_at":"2017-01-20T09:43:25Z","due_on":"2017-01-31T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744/commits","review_comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744/comments","review_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4744/comments","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/c9fd65190d6aaa31e001375c60c7fd3cfa4d9337","head":{"label":"brummer-simon:devel-gnrc_tcp","ref":"devel-gnrc_tcp","sha":"c9fd65190d6aaa31e001375c60c7fd3cfa4d9337","user":{"login":"brummer-simon","id":3950119,"avatar_url":"https://avatars.githubusercontent.com/u/3950119?v=3","gravatar_id":"","url":"https://api.github.com/users/brummer-simon","html_url":"https://github.com/brummer-simon","followers_url":"https://api.github.com/users/brummer-simon/followers","following_url":"https://api.github.com/users/brummer-simon/following{/other_user}","gists_url":"https://api.github.com/users/brummer-simon/gists{/gist_id}","starred_url":"https://api.github.com/users/brummer-simon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brummer-simon/subscriptions","organizations_url":"https://api.github.com/users/brummer-simon/orgs","repos_url":"https://api.github.com/users/brummer-simon/repos","events_url":"https://api.github.com/users/brummer-simon/events{/privacy}","received_events_url":"https://api.github.com/users/brummer-simon/received_events","type":"User","site_admin":false},"repo":{"id":26728513,"name":"RIOT","full_name":"brummer-simon/RIOT","owner":{"login":"brummer-simon","id":3950119,"avatar_url":"https://avatars.githubusercontent.com/u/3950119?v=3","gravatar_id":"","url":"https://api.github.com/users/brummer-simon","html_url":"https://github.com/brummer-simon","followers_url":"https://api.github.com/users/brummer-simon/followers","following_url":"https://api.github.com/users/brummer-simon/following{/other_user}","gists_url":"https://api.github.com/users/brummer-simon/gists{/gist_id}","starred_url":"https://api.github.com/users/brummer-simon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brummer-simon/subscriptions","organizations_url":"https://api.github.com/users/brummer-simon/orgs","repos_url":"https://api.github.com/users/brummer-simon/repos","events_url":"https://api.github.com/users/brummer-simon/events{/privacy}","received_events_url":"https://api.github.com/users/brummer-simon/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/brummer-simon/RIOT","description":"RIOT -  The friendly OS for IoT","fork":true,"url":"https://api.github.com/repos/brummer-simon/RIOT","forks_url":"https://api.github.com/repos/brummer-simon/RIOT/forks","keys_url":"https://api.github.com/repos/brummer-simon/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brummer-simon/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brummer-simon/RIOT/teams","hooks_url":"https://api.github.com/repos/brummer-simon/RIOT/hooks","issue_events_url":"https://api.github.com/repos/brummer-simon/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/brummer-simon/RIOT/events","assignees_url":"https://api.github.com/repos/brummer-simon/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/brummer-simon/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/brummer-simon/RIOT/tags","blobs_url":"https://api.github.com/repos/brummer-simon/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brummer-simon/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brummer-simon/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/brummer-simon/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brummer-simon/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/brummer-simon/RIOT/languages","stargazers_url":"https://api.github.com/repos/brummer-simon/RIOT/stargazers","contributors_url":"https://api.github.com/repos/brummer-simon/RIOT/contributors","subscribers_url":"https://api.github.com/repos/brummer-simon/RIOT/subscribers","subscription_url":"https://api.github.com/repos/brummer-simon/RIOT/subscription","commits_url":"https://api.github.com/repos/brummer-simon/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/brummer-simon/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/brummer-simon/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/brummer-simon/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/brummer-simon/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/brummer-simon/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brummer-simon/RIOT/merges","archive_url":"https://api.github.com/repos/brummer-simon/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brummer-simon/RIOT/downloads","issues_url":"https://api.github.com/repos/brummer-simon/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/brummer-simon/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/brummer-simon/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/brummer-simon/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brummer-simon/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/brummer-simon/RIOT/releases{/id}","deployments_url":"https://api.github.com/repos/brummer-simon/RIOT/deployments","created_at":"2014-11-16T21:23:56Z","updated_at":"2016-11-18T07:24:02Z","pushed_at":"2017-01-19T19:24:14Z","git_url":"git://github.com/brummer-simon/RIOT.git","ssh_url":"git@github.com:brummer-simon/RIOT.git","clone_url":"https://github.com/brummer-simon/RIOT.git","svn_url":"https://github.com/brummer-simon/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":33422,"stargazers_count":1,"watchers_count":1,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"RIOT-OS:master","ref":"master","sha":"2a4df7756755cc35a203fcd8bbc3f865d8be69c1","user":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"repo":{"id":7370241,"name":"RIOT","full_name":"RIOT-OS/RIOT","owner":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RIOT-OS/RIOT","description":"RIOT -  The friendly OS for IoT","fork":false,"url":"https://api.github.com/repos/RIOT-OS/RIOT","forks_url":"https://api.github.com/repos/RIOT-OS/RIOT/forks","keys_url":"https://api.github.com/repos/RIOT-OS/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RIOT-OS/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RIOT-OS/RIOT/teams","hooks_url":"https://api.github.com/repos/RIOT-OS/RIOT/hooks","issue_events_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/RIOT-OS/RIOT/events","assignees_url":"https://api.github.com/repos/RIOT-OS/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/RIOT-OS/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/tags","blobs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/RIOT-OS/RIOT/languages","stargazers_url":"https://api.github.com/repos/RIOT-OS/RIOT/stargazers","contributors_url":"https://api.github.com/repos/RIOT-OS/RIOT/contributors","subscribers_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscribers","subscription_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscription","commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/RIOT-OS/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/RIOT-OS/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RIOT-OS/RIOT/merges","archive_url":"https://api.github.com/repos/RIOT-OS/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RIOT-OS/RIOT/downloads","issues_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/RIOT-OS/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/RIOT-OS/RIOT/releases{/id}","deployments_url":"https://api.github.com/repos/RIOT-OS/RIOT/deployments","created_at":"2012-12-29T20:38:40Z","updated_at":"2017-01-20T10:26:45Z","pushed_at":"2017-01-20T10:19:13Z","git_url":"git://github.com/RIOT-OS/RIOT.git","ssh_url":"git@github.com:RIOT-OS/RIOT.git","clone_url":"https://github.com/RIOT-OS/RIOT.git","svn_url":"https://github.com/RIOT-OS/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":33664,"stargazers_count":1056,"watchers_count":1056,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":698,"mirror_url":null,"open_issues_count":502,"forks":698,"open_issues":502,"watchers":1056,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/4744"},"issue":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4744"},"comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/4744/comments"},"review_comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744/comments"},"review_comment":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/4744/commits"},"statuses":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/c9fd65190d6aaa31e001375c60c7fd3cfa4d9337"}}}}
{"actor":{"display_login":"smlng"}}