コード例 #1
0
void AVReceiver::dataGet(std::string msg)
{
    if (msg.find('\n') == std::string::npos &&
        msg.find('\r') == std::string::npos)
    {
        //We have not a complete paquet yet, buffurize it.
        recv_buffer += msg;

        cDebugDom("output") << "Bufferize data.";

        return;
    }

    if (!recv_buffer.empty())
    {
        //Put last data in buffer
        recv_buffer += msg;
        msg = recv_buffer;
        recv_buffer.clear();
    }

    replace_str(msg, "\r\n", "\n");
    replace_str(msg, "\r", "\n");

    std::vector<std::string> tokens;
    Utils::split(msg, tokens, "\n");

    cDebugDom("output") << "Got " << tokens.size() << " messages.";

    for(uint i = 0; i < tokens.size(); i++)
        processMessage(tokens[i]);
}
コード例 #2
0
void AVReceiver::timerConnReconnect()
{
    cDebugDom("output") << "Connecting to " << host << ":" << port;

    DELETE_NULL_FUNC(ecore_con_server_del, econ);
    econ = ecore_con_server_connect(ECORE_CON_REMOTE_TCP, host.c_str(), port, this);
    ecore_con_server_data_set(econ, this);

    cDebugDom("output") << "econ == " << econ;
}
コード例 #3
0
void HueOutputLightRGB::setColorReal(const ColorValue &c, bool s)
{
    if (!s)
    {
        cDebugDom("hue") << "State OFF ";
        setOff();
    }
    else
    {
        cDebugDom("hue") << "Hue color: " << c.toString();
        setColor(c);
    }
}
コード例 #4
0
AVReceiver::AVReceiver(Params &p, int default_port, int _connection_type):
    ref_count(0),
    params(p),
    econ(NULL),
    timer_con(NULL),
    isConnected(false),
    volume_main(0),
    volume_zone2(0),
    volume_zone3(0),
    power_main(false),
    power_zone2(false),
    power_zone3(false),
    source_main(0),
    source_zone2(0),
    source_zone3(0),
    connection_type(_connection_type)
{
    cDebugDom("output") << params["id"];

    if (!params.Exists("visible")) params.Add("visible", "false");

    host = params["host"];
    port = default_port;

    if (params.Exists("port"))
        from_string(params["port"], port);

    ehandler_add = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, (Ecore_Event_Handler_Cb)_con_server_add, this);
    ehandler_del = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, (Ecore_Event_Handler_Cb)_con_server_del, this);
    ehandler_data = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, (Ecore_Event_Handler_Cb)_con_server_data, this);

    timerConnReconnect();
    timer_con = new EcoreTimer(AVR_RECONNECT, (sigc::slot<void>)sigc::mem_fun(*this, &AVReceiver::timerConnReconnect));
}
コード例 #5
0
void CalaosCameraView::play()
{
    if (ecurl)
        ecore_con_url_free(ecurl);

    ecurl = ecore_con_url_new(cameraUrl.c_str());
    if (!ecurl)
    {
        cErrorDom("camera") << "Failed to create ecore_con_url!";
        return;
    }
    ecore_con_url_data_set(ecurl, this);
    ecore_con_url_ssl_verify_peer_set(ecurl, false);

    single_frame = false;
    buffer.clear();
    formatDetected = false;
    format_error = false;
    nextContentLength = -1;

    if (!ecore_con_url_get(ecurl))
    {
        cErrorDom("camera") << "Could not realize request!";
        ecore_con_url_free(ecurl);
        ecurl = nullptr;
    }

    cDebugDom("camera") << "Request started to " << cameraUrl;
}
コード例 #6
0
ZibaseTemp::ZibaseTemp(Params &p):
    InputTemp(p),
    port(0)
{
    // Define IO documentation
    ioDoc->friendlyNameSet("ZibaseTemp");
    ioDoc->descriptionSet(_("Zibase temperature sensor"));
    ioDoc->paramAdd("host", _("Zibase IP address on the network"), IODoc::TYPE_STRING, true);
    ioDoc->paramAddInt("port", _("Zibase ethernet port, default to 17100"), 0, 65535, false, 17100);
    ioDoc->paramAdd("zibase_id", _("Zibase device ID (ABC)"), IODoc::TYPE_STRING, true);

    Params devList = {{ "temp", _("Temperature sensor") }};
    ioDoc->paramAddList("zibase_sensor", "Type of sensor", true, devList, "temp");

    if (!param_exists("port")) set_param("port", "17100");

    host = get_param("host");
    Utils::from_string(get_param("port"), port);
    id = get_param("zibase_id");

    sensor_type = ZibaseInfoSensor::eTEMP;

    Zibase::Instance(host, port).sig_newframe.connect(sigc::mem_fun(*this, &ZibaseTemp::valueUpdated));

    cDebugDom("input") << get_param("id");
}
コード例 #7
0
void FileDownloader::Cancel()
{
    if (!url_con)
        return;

    ecore_con_url_free(url_con);
    url_con = NULL;
    fclose(dl_file);

    if (dest.empty())
        ecore_file_unlink(tmpFile.c_str());

    cDebugDom("downloader") << "Download aborted! (" << url << ")";

    IPC::Instance().SendEvent("downloader::" + Utils::to_string(this),
                              "aborted",
                              IPCData(new std::string(url), new Utils::DeletorT<std::string *>()),
                              true);

    cb_signal.emit("aborted", &url);
    cb_signal_user.emit("aborted", &url, user_data);

    if (auto_destroy)
    {
        Destroy();
    }
}
コード例 #8
0
void JsonApiHandlerHttp::sendJson(json_t *json)
{
    char *d = json_dumps(json, JSON_COMPACT | JSON_ENSURE_ASCII /*| JSON_ESCAPE_SLASH*/);
    if (!d)
    {
        json_decref(json);
        cDebugDom("network") << "json_dumps failed!";

        Params headers;
        headers.Add("Connection", "close");
        headers.Add("Content-Type", "text/html");
        string res = httpClient->buildHttpResponse(HTTP_500, headers, HTTP_500_BODY);
        sendData.emit(res);
        closeConnection.emit(0, string());

        return;
    }
    json_decref(json);

    string data(d);
    free(d);

    Params headers;
    headers.Add("Connection", "Close");
    headers.Add("Cache-Control", "no-cache, must-revalidate");
    headers.Add("Expires", "Mon, 26 Jul 1997 05:00:00 GMT");
    headers.Add("Content-Type", "application/json");
    headers.Add("Content-Length", Utils::to_string(data.size()));
    string res = httpClient->buildHttpResponse(HTTP_200, headers, data);
    sendData.emit(res);
}
コード例 #9
0
void AVReceiver::sendRequest(std::vector<char> request)
{
    if (!econ || !isConnected) return;

    cDebugDom("output") << request.size() << " bytes";

    ecore_con_server_send(econ, &request[0], request.size());
}
コード例 #10
0
void ActionStd::Remove(int pos)
{
    auto iter = outputs.begin();
    for (int i = 0;i < pos;iter++, i++) ;
    outputs.erase(iter);

    cDebugDom("rule.action.standard") <<  "Ok";
}
コード例 #11
0
void HttpServer::addConnection(Ecore_Con_Client *client)
{
    cDebugDom("network")
            << "Got a new connection from address "
            << ecore_con_client_ip_get(client);

    WebSocket *conn = new WebSocket(client);
    connections[client] = conn;
}
コード例 #12
0
void JsonApiHandlerWS::handleEvents(const CalaosEvent &event)
{
    if (!loggedin)
        return;

    cDebugDom("network") << "Handling event: " << event.toString();

    sendJson("event", event.toJson());
}
コード例 #13
0
void AVReceiver::sendRequest(std::string request)
{
    if (!econ || !isConnected) return;

    cDebugDom("output") << "Command: " << request;

    request += command_suffix;

    ecore_con_server_send(econ, request.c_str(), request.length());
}
コード例 #14
0
AVReceiver::~AVReceiver()
{
    DELETE_NULL(timer_con);
    DELETE_NULL_FUNC(ecore_con_server_del, econ);
    DELETE_NULL_FUNC(ecore_event_handler_del, ehandler_add);
    DELETE_NULL_FUNC(ecore_event_handler_del, ehandler_del);
    DELETE_NULL_FUNC(ecore_event_handler_del, ehandler_data);

    cDebugDom("output");
}
コード例 #15
0
void AVReceiver::addConnection(Ecore_Con_Server *srv)
{
    if (srv != econ) return;

    DELETE_NULL(timer_con);
    isConnected = true;

    connectionEstablished();

    cDebugDom("output") << "main connection established";
}
コード例 #16
0
void HueOutputLightRGB::setOff()
{
    std::string url = "http://" + m_host + "/api/" + m_api + "/lights/" + m_idHue + "/state";
    UrlDownloader *dl = new UrlDownloader(url, true);
    dl->bodyDataSet("{\"on\":false}");
    dl->m_signalCompleteData.connect([&](Eina_Binbuf *downloadedData, int status)
    {
        cDebugDom("hue") << "datareceived: " << eina_binbuf_string_get(downloadedData);
    });

    dl->httpPut();
}
コード例 #17
0
HttpServer::~HttpServer()
{
    ecore_con_server_del(tcp_server);
    tcp_server = NULL;

    ecore_event_handler_del(event_handler_client_add);
    ecore_event_handler_del(event_handler_client_del);
    ecore_event_handler_del(event_handler_data_get);
    ecore_event_handler_del(event_handler_client_write);

    cDebugDom("network");
}
コード例 #18
0
void ActionStd::Add(IOBase *out)
{
    if (!out->isOutput())
    {
        cWarningDom("rule.action.standard") << "Unable to add IO "
                                            << out->get_param("id")
                                            << " to action list. IO is not an output";
        return;
    }

    outputs.push_back(out);

    cDebugDom("rule.action.standard") <<  "Output(" << out->get_param("id") << ") added";
}
コード例 #19
0
Eina_Bool _url_complete_cb(void *data, int type, void *event_info)
{
    Ecore_Con_Event_Url_Complete *url_complete = reinterpret_cast<Ecore_Con_Event_Url_Complete *>(event_info);
    CalaosCameraView *view = reinterpret_cast<CalaosCameraView *>(data);

    if (view != ecore_con_url_data_get(url_complete->url_con))
        return true;

    cDebugDom("camera") << "completed: " << view->buffer.size();

    view->requestCompleted();

    return true;
}
コード例 #20
0
HttpServer::HttpServer(int p):
    port(p),
    tcp_server(NULL)
{
    /* Setup ecore con TCP server and callbacks */

    tcp_server = ecore_con_server_add(ECORE_CON_REMOTE_TCP, "0.0.0.0", port, this);
    ecore_con_server_data_set(tcp_server, this);

    event_handler_client_add = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD, (Ecore_Event_Handler_Cb)_ecore_con_handler_client_add, this);
    event_handler_client_del = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb)_ecore_con_handler_data_get, this);
    event_handler_client_write = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_WRITE, (Ecore_Event_Handler_Cb)_ecore_con_handler_data_write, this);
    event_handler_data_get = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, (Ecore_Event_Handler_Cb)_ecore_con_handler_client_del, this);

    cDebugDom("network") << "Init TCP Server";
    cInfoDom("network")  << "Listening on port " << port;
}
コード例 #21
0
void HttpServer::dataWritten(Ecore_Con_Client *client, int size)
{
    cDebugDom("network")
            << Utils::to_string(size) << " bytes written"
            << " to client at address "
            << ecore_con_client_ip_get(client);

    std::map<Ecore_Con_Client *, WebSocket *>::iterator it = connections.find(client);
    if (it == connections.end())
    {
        cCriticalDom("network") << "Can't find corresponding HttpClient !";

        return;
    }

    it->second->DataWritten(size);
}
コード例 #22
0
void HttpServer::delConnection(Ecore_Con_Client *client)
{
    cDebugDom("network")
            << "Connection from adress "
            << ecore_con_client_ip_get(client) << " closed.";

    std::map<Ecore_Con_Client *, WebSocket *>::iterator it = connections.find(client);
    if (it == connections.end())
    {
        cCriticalDom("network") << "Can't find corresponding HttpClient !";

        return;
    }

    delete it->second;
    connections.erase(it);
}
コード例 #23
0
void HueOutputLightRGB::setColor(const ColorValue &c)
{
    std::string url = "http://" + m_host + "/api/" + m_api + "/lights/" + m_idHue + "/state";
    UrlDownloader *dl = new UrlDownloader(url, true);
    std::string ccolor = "{\"on\":true,"
                   "\"sat\":"  + Utils::to_string((int)(c.getHSVSaturation() * 255.0 / 100.0)) +
                   ",\"bri\":" + Utils::to_string((int)(c.getHSLLightness() * 255.0 / 100.0)) +
                   ",\"hue\":" + Utils::to_string((int)(c.getHSLHue() * 65535.0 / 360.0)) + "}";
    dl->bodyDataSet(ccolor);
    dl->m_signalCompleteData.connect([&](Eina_Binbuf *downloadedData, int status)
    {
        VAR_UNUSED(status);
        cDebugDom("hue") << "datareceived: " << eina_binbuf_string_get(downloadedData);
    });

    dl->httpPut();
}
コード例 #24
0
Eina_Bool _url_data_cb(void *data, int type, void *event_info)
{
    Ecore_Con_Event_Url_Data *url_data = reinterpret_cast<Ecore_Con_Event_Url_Data *>(event_info);
    CalaosCameraView *view = reinterpret_cast<CalaosCameraView *>(data);

    if (view != ecore_con_url_data_get(url_data->url_con))
        return true;

    view->buffer.reserve(view->buffer.size() + url_data->size);
    std::copy(url_data->data, url_data->data + url_data->size, std::back_inserter(view->buffer));

    if (view->headers.size() <= 0)
    {
        const Eina_List *headers, *l;
        void *str;
        headers = ecore_con_url_response_headers_get(url_data->url_con);

        EINA_LIST_FOREACH(headers, l, str)
        {
            if (!str) continue;
            string s((char *)str);

            vector<string> tokens;
            Utils::replace_str(s, "\n", "");
            Utils::replace_str(s, "\r", "");
            Utils::split(s, tokens, ":", 2);

            string key = tokens[0];
            Utils::trim_left(key, " ");
            Utils::trim_right(key, " ");

            string val = tokens[1];
            Utils::trim_left(val, " ");
            Utils::trim_right(val, " ");

            cDebugDom("camera") << "add key: \"" << key << "\" with value: \"" << val << "\"";
            view->headers.Add(key, val);

        }
    }

    view->processData();

    return true;
}
コード例 #25
0
void HttpServer::getDataConnection(Ecore_Con_Client *client, void *data, int size)
{
    std::string d((char *)data, size);

    cDebugDom("network")
            << "Got data from client at address "
            << ecore_con_client_ip_get(client);

    std::map<Ecore_Con_Client *, WebSocket *>::iterator it = connections.find(client);
    if (it == connections.end())
    {
        cCriticalDom("network") << "Can't find corresponding HttpClient !";

        return;
    }

    it->second->ProcessData(d);
}
コード例 #26
0
ファイル: OWCtrl.cpp プロジェクト: DjMomo/calaos_base
OwCtrl::OwCtrl(const string &args)
{
    cDebugDom("1wire") << "new OWCtrl: " << args;
    process = new ExternProcServer("1wire");

    exe = Prefix::Instance().binDirectoryGet() + "/calaos_1wire";

    process->messageReceived.connect(sigc::mem_fun(*this, &OwCtrl::processNewMessage));

    process->processExited.connect([=]()
    {
        //restart process when stopped
        cWarningDom("process") << "process exited, restarting...";
        process->startProcess(exe, "1wire", args);
    });

    process->startProcess(exe, "1wire", args);
}
コード例 #27
0
void CalaosConnection::onConnected()
{
    if (con_state == CALAOS_CON_NONE)
    {
        con_state = CALAOS_CON_LOGIN;

        //Get username/password
        string username;
        string password;
        getCredentials(username, password);

        json_t *jlogin = json_pack("{s:s, s:s}",
                                   "cn_user", username.c_str(),
                                   "cn_pass", password.c_str());
        sendJson("login", jlogin);

        cDebugDom("network.connection") << "trying to log in.";
    }
}
コード例 #28
0
void ActivityScheduleScenarioView::headerWeekButtonClick(string bt)
{
    if (bt == "button.back")
    {
        editState = editStatesHist.top();
        editStatesHist.pop();
        elm_naviframe_item_pop(pager_popup);
    }
    else if (bt == "button.valid")
    {
        if (is_edit)
        {
            deleteTimeRange(old_range);
        }

        if (week_days[0]->isSelected() || week_days[1]->isSelected())
            range_infos.range_monday.push_back(edit_range);
        if (week_days[0]->isSelected() || week_days[2]->isSelected())
            range_infos.range_tuesday.push_back(edit_range);
        if (week_days[0]->isSelected() || week_days[3]->isSelected())
            range_infos.range_wednesday.push_back(edit_range);
        if (week_days[0]->isSelected() || week_days[4]->isSelected())
            range_infos.range_thursday.push_back(edit_range);
        if (week_days[0]->isSelected() || week_days[5]->isSelected())
            range_infos.range_friday.push_back(edit_range);
        if (week_days[0]->isSelected() || week_days[6]->isSelected())
            range_infos.range_saturday.push_back(edit_range);
        if (week_days[0]->isSelected() || week_days[7]->isSelected())
            range_infos.range_sunday.push_back(edit_range);

        cDebugDom("auto_scenario") <<  "New TimeRange: " << edit_range.toString();

        elm_ctxpopup_dismiss(popup);

        reloadTimeRanges();
    }
}
コード例 #29
0
bool ActionStd::Execute()
{
    std::string tmp;
    bool ret = true;
    std::string sval;
    bool bval = false;
    double dval = 0;

    for (uint i = 0;i < outputs.size();i++)
    {
        bool ovar = false;
        switch (outputs[i]->get_type())
        {
        case TBOOL:
        {
            if (params_var[outputs[i]->get_param("id")] != "")
            {
                std::string var_id = params_var[outputs[i]->get_param("id")];
                IOBase *out = ListeRoom::Instance().get_io(var_id);
                if (out && out->get_type() == TBOOL)
                {
                    bval = out->get_value_bool();
                    ovar = true;
                }
            }

            if (ovar)
            {
                if (!outputs[i]->set_value(bval)) ret = false;
            }
            else if (params[outputs[i]->get_param("id")] == "true")
            {
                if (!outputs[i]->set_value(true)) ret = false;
            }
            else if (params[outputs[i]->get_param("id")] == "false")
            {
                if (!outputs[i]->set_value(false)) ret = false;
            }
            else
            {
                if (!outputs[i]->set_value(params[outputs[i]->get_param("id")])) ret = false;
            }
            break;
        }
        case TINT:
        {
            if (params_var[outputs[i]->get_param("id")] != "")
            {
                std::string var_id = params_var[outputs[i]->get_param("id")];
                IOBase *out = ListeRoom::Instance().get_io(var_id);
                if (out && out->get_type() == TINT)
                {
                    dval = out->get_value_double();
                    ovar = true;
                }
            }
            tmp = params[outputs[i]->get_param("id")];

            if (ovar)
            {
                if (!outputs[i]->set_value(dval)) ret = false;
            }
            else if (is_of_type<double>(tmp))
            {
                if (!outputs[i]->set_value(atof(tmp.c_str()))) ret = false;
            }
            else
            {
                if (!outputs[i]->set_value(tmp)) ret = false;
            }
            break;
        }
        case TSTRING:
        {
            if (params_var[outputs[i]->get_param("id")] != "")
            {
                std::string var_id = params_var[outputs[i]->get_param("id")];
                IOBase *out = ListeRoom::Instance().get_io(var_id);
                if (out && out->get_type() == TSTRING)
                {
                    sval = out->get_command_string();
                    ovar = true;
                }
            }
            tmp = params[outputs[i]->get_param("id")];

            if (ovar)
            {
                if (!outputs[i]->set_value(sval)) ret = false;
            }
            else if (tmp != "")
            {
                if (!outputs[i]->set_value(tmp)) ret = false;
            }

            break;
        }
        default: break;
        }
    }

    if (ret)
        cDebugDom("rule.action.standard") <<  "Ok";
    else
        cErrorDom("rule.action.standard") <<  "Failed !";

    return ret;
}
コード例 #30
0
ActionStd::~ActionStd()
{
    cDebugDom("rule.action.standard");
}