Как ограничить подключения к разрешенным IP-адресам в GCDWebServer

Я играю с классом GCDWebServer (это здорово!) и мне было интересно, можно ли ограничить разрешенные соединения по удаленному IP.

server.addDefaultHandlerForMethod("GET", requestClass: GCDWebServerRequest.self, processBlock: {request in

    let remote = request.remoteAddressString.substringToIndex(request.remoteAddressString.lastIndexOf(":")!)
    let local =  request.localAddressString.substringToIndex(request.localAddressString.lastIndexOf(":")!)

    print("\(remote) vs \(local)")
    if remote == local {
        return nil
    }

    //Forbidden
    return GCDWebServerResponse(statusCode: 403);

})

Я надеялся, что выше сработает, но это не так, я имею в виду, что он отправляет 403 Forbidden, когда IP-адреса разные, но в противном случае это заканчивается:

[DEBUG] Connection aborted with status code 500 on socket 13

Кто-нибудь может мне с этим помочь?

P.S. следующий также не работает

    server.addDefaultHandlerForMethod("GET",
                                      requestClass: GCDWebServerRequest.self,
                                      processBlock: {request in

    print(request.remoteAddressString)
    print(request.localAddressString)

    let remote = request.remoteAddressString.substringToIndex(request.remoteAddressString.lastIndexOf(":")!)
    let local =  request.localAddressString.substringToIndex(request.localAddressString.lastIndexOf(":")!)

    print("\(remote) vs \(local)")
    if remote == local {
        return GCDWebServerResponse(statusCode: 200)
    }
    //Forbidden
    return GCDWebServerResponse(statusCode: 403);
})

person Lukasz 'Severiaan' Grela    schedule 05.10.2016    source источник


Ответы (1)


См. GCDWebServer.h для GCDWebServerProcessBlock:

Блок должен возвращать GCDWebServerResponse или nil при ошибке, что приведет к возврату клиенту кода состояния HTTP 500.

person Pol    schedule 11.10.2016
comment
Вы говорите, что я должен в случае успеха (например, действительный ip) не возвращать nil, а, например, GCDWebServerResponse(statusCode: 200)? - person Lukasz 'Severiaan' Grela; 01.11.2016
comment
Да, вы должны вернуть ответ. Возврат nil приведет к ответу с ошибкой 500, а это не то, что вам нужно. - person Pol; 01.11.2016
comment
Я сделал, как было предложено, но на экране ничего не появляется, страница не загружается, когда я удаляю этот server.addDefaultHandlerForMethod, он работает (но с любого IP) :( - person Lukasz 'Severiaan' Grela; 02.11.2016
comment
Ваша проверка IP не будет работать должным образом, если вы используете несколько обработчиков. Я думаю, вы ожидали, что возврат nil из блока процесса обработчика приведет к вызову следующего обработчика. Это не так, как это работает в GCDWebServer. Если код проверки IP находится в блоке процесса обработчика, то вам необходимо иметь этот код в каждом обработчике вашего приложения. - person Pol; 03.11.2016
comment
Не могли бы вы показать мне пример того, как остановить сетевую связь с запрещенного IP-адреса? - person Lukasz 'Severiaan' Grela; 03.11.2016
comment
Ваш код в вашем вопросе уже делает это правильно: просто верните реальный ответ, а не просто GCDWebServerResponse(statusCode: 200). - person Pol; 04.11.2016