{"action":"created","comment":{"url":"https://api.github.com/repos/quassel/quassel/pulls/comments/196157768","pull_request_review_id":129657331,"id":196157768,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NjE1Nzc2OA==","diff_hunk":"@@ -0,0 +1,86 @@\n+/***************************************************************************\n+ *   Copyright (C) 2005-2018 by the Quassel Project                        *\n+ *   devel@quassel-irc.org                                                 *\n+ *                                                                         *\n+ *   This program is free software; you can redistribute it and/or modify  *\n+ *   it under the terms of the GNU General Public License as published by  *\n+ *   the Free Software Foundation; either version 2 of the License, or     *\n+ *   (at your option) version 3.                                           *\n+ *                                                                         *\n+ *   This program is distributed in the hope that it will be useful,       *\n+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *\n+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *\n+ *   GNU General Public License for more details.                          *\n+ *                                                                         *\n+ *   You should have received a copy of the GNU General Public License     *\n+ *   along with this program; if not, write to the                         *\n+ *   Free Software Foundation, Inc.,                                       *\n+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *\n+ ***************************************************************************/\n+\n+#pragma once\n+\n+#include <list>\n+\n+#include <QHash>\n+#include <QObject>\n+#include <QPointer>\n+#include <QString>\n+#include <QTcpServer>\n+#include <QTcpSocket>\n+\n+#include \"coreidentity.h\"\n+\n+struct Request\n+{\n+    QPointer<QTcpSocket> socket;\n+    uint16_t localPort;\n+    QString query;\n+    qint64 transactionId;\n+    qint64 requestId;\n+\n+    friend bool operator==(const Request &a, const Request &b);\n+\n+    void respondSuccess(const QString &user);\n+    void respondError(const QString &error);\n+};\n+\n+\n+class IdentServer : public QObject\n+{\n+    Q_OBJECT\n+\n+public:\n+    IdentServer(bool strict, QObject *parent = nullptr);\n+\n+    bool startListening();\n+    void stopListening(const QString &msg);\n+    qint64 addWaitingSocket();\n+\n+public slots:\n+    void addSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort, qint64 socketId);\n+    void removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort, qint64 socketId);\n+\n+private slots:\n+    void incomingConnection();\n+    void respond();\n+\n+private:\n+    bool responseAvailable(Request request) const;\n+\n+    qint64 lowestSocketId() const;\n+\n+    void processWaiting(qint64 socketId);\n+\n+    void removeWaitingSocket(qint64 socketId);\n+\n+    QTcpServer _server, _v6server;\n+\n+    bool _strict;","path":"src/core/identserver.h","position":79,"original_position":79,"commit_id":"7e58fa2521797c1a8748f2032f53f321a4ad2945","original_commit_id":"7e58fa2521797c1a8748f2032f53f321a4ad2945","user":{"login":"digitalcircuit","id":1449717,"node_id":"MDQ6VXNlcjE0NDk3MTc=","avatar_url":"https://avatars1.githubusercontent.com/u/1449717?v=4","gravatar_id":"","url":"https://api.github.com/users/digitalcircuit","html_url":"https://github.com/digitalcircuit","followers_url":"https://api.github.com/users/digitalcircuit/followers","following_url":"https://api.github.com/users/digitalcircuit/following{/other_user}","gists_url":"https://api.github.com/users/digitalcircuit/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalcircuit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalcircuit/subscriptions","organizations_url":"https://api.github.com/users/digitalcircuit/orgs","repos_url":"https://api.github.com/users/digitalcircuit/repos","events_url":"https://api.github.com/users/digitalcircuit/events{/privacy}","received_events_url":"https://api.github.com/users/digitalcircuit/received_events","type":"User","site_admin":false},"body":"`_strict` is no longer needed, [`--strict-ident` is handled in the `CoreSession`](https://github.com/quassel/quassel/commit/67e4eb295238453c94da41185bcdb20d908859d6#diff-0b1923d012d365b5c40a4ee701214ac6R567 ).","created_at":"2018-06-18T17:18:12Z","updated_at":"2018-06-18T17:22:43Z","html_url":"https://github.com/quassel/quassel/pull/356#discussion_r196157768","pull_request_url":"https://api.github.com/repos/quassel/quassel/pulls/356","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/quassel/quassel/pulls/comments/196157768"},"html":{"href":"https://github.com/quassel/quassel/pull/356#discussion_r196157768"},"pull_request":{"href":"https://api.github.com/repos/quassel/quassel/pulls/356"}}},"pull_request":{"url":"https://api.github.com/repos/quassel/quassel/pulls/356","id":186479283,"node_id":"MDExOlB1bGxSZXF1ZXN0MTg2NDc5Mjgz","html_url":"https://github.com/quassel/quassel/pull/356","diff_url":"https://github.com/quassel/quassel/pull/356.diff","patch_url":"https://github.com/quassel/quassel/pull/356.patch","issue_url":"https://api.github.com/repos/quassel/quassel/issues/356","number":356,"state":"open","locked":false,"title":"Initial implementation of integrated ident daemon","user":{"login":"justjanne","id":3933349,"node_id":"MDQ6VXNlcjM5MzMzNDk=","avatar_url":"https://avatars0.githubusercontent.com/u/3933349?v=4","gravatar_id":"","url":"https://api.github.com/users/justjanne","html_url":"https://github.com/justjanne","followers_url":"https://api.github.com/users/justjanne/followers","following_url":"https://api.github.com/users/justjanne/following{/other_user}","gists_url":"https://api.github.com/users/justjanne/gists{/gist_id}","starred_url":"https://api.github.com/users/justjanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justjanne/subscriptions","organizations_url":"https://api.github.com/users/justjanne/orgs","repos_url":"https://api.github.com/users/justjanne/repos","events_url":"https://api.github.com/users/justjanne/events{/privacy}","received_events_url":"https://api.github.com/users/justjanne/received_events","type":"User","site_admin":false},"body":"## In Short\r\n* Implements an integrated daemon for identd which listens on localhost on a configurable port\r\n* Adds --ident-daemon and --ident-port config flags\r\n\r\n## Rationale\r\nThe current oidentd integration is prone to race conditions, especially with many users. This solution should work much more reliable in the long term.","created_at":"2018-05-07T22:14:19Z","updated_at":"2018-06-18T17:22:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"99345dfad2d0251f8652b970508dabf959b06d6b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/quassel/quassel/pulls/356/commits","review_comments_url":"https://api.github.com/repos/quassel/quassel/pulls/356/comments","review_comment_url":"https://api.github.com/repos/quassel/quassel/pulls/comments{/number}","comments_url":"https://api.github.com/repos/quassel/quassel/issues/356/comments","statuses_url":"https://api.github.com/repos/quassel/quassel/statuses/7e58fa2521797c1a8748f2032f53f321a4ad2945","head":{"label":"justjanne:integrated-ident-server","ref":"integrated-ident-server","sha":"7e58fa2521797c1a8748f2032f53f321a4ad2945","user":{"login":"justjanne","id":3933349,"node_id":"MDQ6VXNlcjM5MzMzNDk=","avatar_url":"https://avatars0.githubusercontent.com/u/3933349?v=4","gravatar_id":"","url":"https://api.github.com/users/justjanne","html_url":"https://github.com/justjanne","followers_url":"https://api.github.com/users/justjanne/followers","following_url":"https://api.github.com/users/justjanne/following{/other_user}","gists_url":"https://api.github.com/users/justjanne/gists{/gist_id}","starred_url":"https://api.github.com/users/justjanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justjanne/subscriptions","organizations_url":"https://api.github.com/users/justjanne/orgs","repos_url":"https://api.github.com/users/justjanne/repos","events_url":"https://api.github.com/users/justjanne/events{/privacy}","received_events_url":"https://api.github.com/users/justjanne/received_events","type":"User","site_admin":false},"repo":{"id":85239126,"node_id":"MDEwOlJlcG9zaXRvcnk4NTIzOTEyNg==","name":"quassel","full_name":"justjanne/quassel","owner":{"login":"justjanne","id":3933349,"node_id":"MDQ6VXNlcjM5MzMzNDk=","avatar_url":"https://avatars0.githubusercontent.com/u/3933349?v=4","gravatar_id":"","url":"https://api.github.com/users/justjanne","html_url":"https://github.com/justjanne","followers_url":"https://api.github.com/users/justjanne/followers","following_url":"https://api.github.com/users/justjanne/following{/other_user}","gists_url":"https://api.github.com/users/justjanne/gists{/gist_id}","starred_url":"https://api.github.com/users/justjanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justjanne/subscriptions","organizations_url":"https://api.github.com/users/justjanne/orgs","repos_url":"https://api.github.com/users/justjanne/repos","events_url":"https://api.github.com/users/justjanne/events{/privacy}","received_events_url":"https://api.github.com/users/justjanne/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/justjanne/quassel","description":"Quassel IRC","fork":true,"url":"https://api.github.com/repos/justjanne/quassel","forks_url":"https://api.github.com/repos/justjanne/quassel/forks","keys_url":"https://api.github.com/repos/justjanne/quassel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/justjanne/quassel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/justjanne/quassel/teams","hooks_url":"https://api.github.com/repos/justjanne/quassel/hooks","issue_events_url":"https://api.github.com/repos/justjanne/quassel/issues/events{/number}","events_url":"https://api.github.com/repos/justjanne/quassel/events","assignees_url":"https://api.github.com/repos/justjanne/quassel/assignees{/user}","branches_url":"https://api.github.com/repos/justjanne/quassel/branches{/branch}","tags_url":"https://api.github.com/repos/justjanne/quassel/tags","blobs_url":"https://api.github.com/repos/justjanne/quassel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/justjanne/quassel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/justjanne/quassel/git/refs{/sha}","trees_url":"https://api.github.com/repos/justjanne/quassel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/justjanne/quassel/statuses/{sha}","languages_url":"https://api.github.com/repos/justjanne/quassel/languages","stargazers_url":"https://api.github.com/repos/justjanne/quassel/stargazers","contributors_url":"https://api.github.com/repos/justjanne/quassel/contributors","subscribers_url":"https://api.github.com/repos/justjanne/quassel/subscribers","subscription_url":"https://api.github.com/repos/justjanne/quassel/subscription","commits_url":"https://api.github.com/repos/justjanne/quassel/commits{/sha}","git_commits_url":"https://api.github.com/repos/justjanne/quassel/git/commits{/sha}","comments_url":"https://api.github.com/repos/justjanne/quassel/comments{/number}","issue_comment_url":"https://api.github.com/repos/justjanne/quassel/issues/comments{/number}","contents_url":"https://api.github.com/repos/justjanne/quassel/contents/{+path}","compare_url":"https://api.github.com/repos/justjanne/quassel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/justjanne/quassel/merges","archive_url":"https://api.github.com/repos/justjanne/quassel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/justjanne/quassel/downloads","issues_url":"https://api.github.com/repos/justjanne/quassel/issues{/number}","pulls_url":"https://api.github.com/repos/justjanne/quassel/pulls{/number}","milestones_url":"https://api.github.com/repos/justjanne/quassel/milestones{/number}","notifications_url":"https://api.github.com/repos/justjanne/quassel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/justjanne/quassel/labels{/name}","releases_url":"https://api.github.com/repos/justjanne/quassel/releases{/id}","deployments_url":"https://api.github.com/repos/justjanne/quassel/deployments","created_at":"2017-03-16T20:33:26Z","updated_at":"2017-03-16T20:33:31Z","pushed_at":"2018-06-17T22:12:45Z","git_url":"git://github.com/justjanne/quassel.git","ssh_url":"git@github.com:justjanne/quassel.git","clone_url":"https://github.com/justjanne/quassel.git","svn_url":"https://github.com/justjanne/quassel","homepage":null,"size":27882,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"quassel:master","ref":"master","sha":"5e4bfcea8cf62cded326d385acd47528c1974b09","user":{"login":"quassel","id":2965670,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjU2NzA=","avatar_url":"https://avatars0.githubusercontent.com/u/2965670?v=4","gravatar_id":"","url":"https://api.github.com/users/quassel","html_url":"https://github.com/quassel","followers_url":"https://api.github.com/users/quassel/followers","following_url":"https://api.github.com/users/quassel/following{/other_user}","gists_url":"https://api.github.com/users/quassel/gists{/gist_id}","starred_url":"https://api.github.com/users/quassel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quassel/subscriptions","organizations_url":"https://api.github.com/users/quassel/orgs","repos_url":"https://api.github.com/users/quassel/repos","events_url":"https://api.github.com/users/quassel/events{/privacy}","received_events_url":"https://api.github.com/users/quassel/received_events","type":"Organization","site_admin":false},"repo":{"id":7007419,"node_id":"MDEwOlJlcG9zaXRvcnk3MDA3NDE5","name":"quassel","full_name":"quassel/quassel","owner":{"login":"quassel","id":2965670,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjU2NzA=","avatar_url":"https://avatars0.githubusercontent.com/u/2965670?v=4","gravatar_id":"","url":"https://api.github.com/users/quassel","html_url":"https://github.com/quassel","followers_url":"https://api.github.com/users/quassel/followers","following_url":"https://api.github.com/users/quassel/following{/other_user}","gists_url":"https://api.github.com/users/quassel/gists{/gist_id}","starred_url":"https://api.github.com/users/quassel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quassel/subscriptions","organizations_url":"https://api.github.com/users/quassel/orgs","repos_url":"https://api.github.com/users/quassel/repos","events_url":"https://api.github.com/users/quassel/events{/privacy}","received_events_url":"https://api.github.com/users/quassel/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/quassel/quassel","description":"Quassel IRC: Chat comfortably.  Everywhere.","fork":false,"url":"https://api.github.com/repos/quassel/quassel","forks_url":"https://api.github.com/repos/quassel/quassel/forks","keys_url":"https://api.github.com/repos/quassel/quassel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/quassel/quassel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/quassel/quassel/teams","hooks_url":"https://api.github.com/repos/quassel/quassel/hooks","issue_events_url":"https://api.github.com/repos/quassel/quassel/issues/events{/number}","events_url":"https://api.github.com/repos/quassel/quassel/events","assignees_url":"https://api.github.com/repos/quassel/quassel/assignees{/user}","branches_url":"https://api.github.com/repos/quassel/quassel/branches{/branch}","tags_url":"https://api.github.com/repos/quassel/quassel/tags","blobs_url":"https://api.github.com/repos/quassel/quassel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/quassel/quassel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/quassel/quassel/git/refs{/sha}","trees_url":"https://api.github.com/repos/quassel/quassel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/quassel/quassel/statuses/{sha}","languages_url":"https://api.github.com/repos/quassel/quassel/languages","stargazers_url":"https://api.github.com/repos/quassel/quassel/stargazers","contributors_url":"https://api.github.com/repos/quassel/quassel/contributors","subscribers_url":"https://api.github.com/repos/quassel/quassel/subscribers","subscription_url":"https://api.github.com/repos/quassel/quassel/subscription","commits_url":"https://api.github.com/repos/quassel/quassel/commits{/sha}","git_commits_url":"https://api.github.com/repos/quassel/quassel/git/commits{/sha}","comments_url":"https://api.github.com/repos/quassel/quassel/comments{/number}","issue_comment_url":"https://api.github.com/repos/quassel/quassel/issues/comments{/number}","contents_url":"https://api.github.com/repos/quassel/quassel/contents/{+path}","compare_url":"https://api.github.com/repos/quassel/quassel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/quassel/quassel/merges","archive_url":"https://api.github.com/repos/quassel/quassel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/quassel/quassel/downloads","issues_url":"https://api.github.com/repos/quassel/quassel/issues{/number}","pulls_url":"https://api.github.com/repos/quassel/quassel/pulls{/number}","milestones_url":"https://api.github.com/repos/quassel/quassel/milestones{/number}","notifications_url":"https://api.github.com/repos/quassel/quassel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/quassel/quassel/labels{/name}","releases_url":"https://api.github.com/repos/quassel/quassel/releases{/id}","deployments_url":"https://api.github.com/repos/quassel/quassel/deployments","created_at":"2012-12-04T21:43:06Z","updated_at":"2018-06-18T06:46:41Z","pushed_at":"2018-06-18T17:20:20Z","git_url":"git://github.com/quassel/quassel.git","ssh_url":"git@github.com:quassel/quassel.git","clone_url":"https://github.com/quassel/quassel.git","svn_url":"https://github.com/quassel/quassel","homepage":"https://quassel-irc.org/","size":27930,"stargazers_count":423,"watchers_count":423,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":172,"mirror_url":null,"archived":false,"open_issues_count":15,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":172,"open_issues":15,"watchers":423,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/quassel/quassel/pulls/356"},"html":{"href":"https://github.com/quassel/quassel/pull/356"},"issue":{"href":"https://api.github.com/repos/quassel/quassel/issues/356"},"comments":{"href":"https://api.github.com/repos/quassel/quassel/issues/356/comments"},"review_comments":{"href":"https://api.github.com/repos/quassel/quassel/pulls/356/comments"},"review_comment":{"href":"https://api.github.com/repos/quassel/quassel/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/quassel/quassel/pulls/356/commits"},"statuses":{"href":"https://api.github.com/repos/quassel/quassel/statuses/7e58fa2521797c1a8748f2032f53f321a4ad2945"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"digitalcircuit"}}