static void get_info_refs(char *arg) { const char *service_name = get_parameter("service"); struct strbuf buf = STRBUF_INIT; hdr_nocache(); if (service_name) { const char *argv[] = {NULL /* service name */, "--stateless-rpc", "--advertise-refs", ".", NULL}; struct rpc_service *svc = select_service(service_name); strbuf_addf(&buf, "application/x-git-%s-advertisement", svc->name); hdr_str(content_type, buf.buf); end_headers(); packet_write(1, "# service=git-%s\n", svc->name); packet_flush(1); argv[0] = svc->name; run_service(argv); } else { select_getanyfile(); for_each_namespaced_ref(show_text_ref, &buf); send_strbuf("text/plain", &buf); } strbuf_release(&buf); }
static void select_and_connect(struct connman_session *session, enum connman_session_reason reason) { struct session_info *info = session->info; struct service_entry *entry = NULL; GSequenceIter *iter; DBG("session %p reason %s", session, reason2string(reason)); info->reason = reason; iter = g_sequence_get_begin_iter(session->service_list); while (g_sequence_iter_is_end(iter) == FALSE) { entry = g_sequence_get(iter); switch (entry->state) { case CONNMAN_SERVICE_STATE_ASSOCIATION: case CONNMAN_SERVICE_STATE_CONFIGURATION: case CONNMAN_SERVICE_STATE_READY: case CONNMAN_SERVICE_STATE_ONLINE: case CONNMAN_SERVICE_STATE_IDLE: case CONNMAN_SERVICE_STATE_DISCONNECT: select_service(info, entry); return; case CONNMAN_SERVICE_STATE_UNKNOWN: case CONNMAN_SERVICE_STATE_FAILURE: break; } iter = g_sequence_iter_next(iter); } }
static void service_rpc(char *service_name) { const char *argv[] = {NULL, "--stateless-rpc", ".", NULL}; struct rpc_service *svc = select_service(service_name); struct strbuf buf = STRBUF_INIT; strbuf_reset(&buf); strbuf_addf(&buf, "application/x-git-%s-request", svc->name); check_content_type(buf.buf); hdr_nocache(); strbuf_reset(&buf); strbuf_addf(&buf, "application/x-git-%s-result", svc->name); hdr_str(content_type, buf.buf); end_headers(); argv[0] = svc->name; run_service(argv); strbuf_release(&buf); }
static void handle_getcapabilities_req(struct unix_client *client, struct bt_get_capabilities_req *req) { struct audio_device *dev; bdaddr_t src, dst; int err = EIO; const char *interface; if (!check_nul(req->source) || !check_nul(req->destination) || !check_nul(req->object)) { err = EINVAL; goto failed; } str2ba(req->source, &src); str2ba(req->destination, &dst); if (!manager_find_device(req->object, &src, &dst, NULL, FALSE)) goto failed; if (req->transport == BT_CAPABILITIES_TRANSPORT_SCO) interface = AUDIO_HEADSET_INTERFACE; else if (req->transport == BT_CAPABILITIES_TRANSPORT_A2DP) interface = AUDIO_SINK_INTERFACE; else interface = client->interface; dev = manager_find_device(req->object, &src, &dst, interface, TRUE); if (!dev && (req->flags & BT_FLAG_AUTOCONNECT)) dev = manager_find_device(req->object, &src, &dst, interface, FALSE); if (!dev) { if (req->transport == BT_CAPABILITIES_TRANSPORT_SCO) interface = AUDIO_GATEWAY_INTERFACE; else if (req->transport == BT_CAPABILITIES_TRANSPORT_A2DP) interface = AUDIO_SOURCE_INTERFACE; else interface = NULL; dev = manager_find_device(req->object, &src, &dst, interface, TRUE); if (!dev && (req->flags & BT_FLAG_AUTOCONNECT)) dev = manager_find_device(req->object, &src, &dst, interface, FALSE); } if (!dev) { error("Unable to find a matching device"); goto failed; } client->type = select_service(dev, interface); if (client->type == TYPE_NONE) { error("No matching service found"); goto failed; } if (g_strcmp0(interface, client->interface) != 0) { g_free(client->interface); client->interface = g_strdup(interface); } client->seid = req->seid; start_discovery(dev, client); return; failed: unix_ipc_error(client, BT_GET_CAPABILITIES, err); }