Changeset 6e9e12b in mainline for uspace/srv/logger/main.c
- Timestamp:
- 2012-08-16T09:15:21Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0a6a996
- Parents:
- 669f5cae
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/logger/main.c
r669f5cae r6e9e12b 104 104 static int handle_receive_message(logging_namespace_t *namespace, int level) 105 105 { 106 bool skip_message = (level > (int)get_default_logging_level()) &&!namespace_has_reader(namespace, level);106 bool skip_message = !namespace_has_reader(namespace, level); 107 107 if (skip_message) { 108 108 /* Abort the actual message buffer transfer. */ … … 156 156 printf(NAME "/sink: client %s terminated.\n", namespace_get_name(namespace)); 157 157 namespace_writer_detach(namespace); 158 }159 160 161 static logging_namespace_t *find_namespace_and_attach_reader(void)162 {163 ipc_call_t call;164 ipc_callid_t callid = async_get_call(&call);165 166 if (IPC_GET_IMETHOD(call) != LOGGER_CONNECT) {167 async_answer_0(callid, EINVAL);168 return NULL;169 }170 171 void *name;172 int rc = async_data_write_accept(&name, true, 1, MAX_NAMESPACE_LENGTH, 0, NULL);173 174 if (rc != EOK) {175 async_answer_0(callid, rc);176 return NULL;177 }178 179 logging_namespace_t *result = namespace_reader_attach((const char *) name);180 if (result == NULL) {181 rc = ENOENT;182 }183 184 async_answer_0(callid, rc);185 186 free(name);187 188 return result;189 }190 191 192 static int handle_send_message(logging_namespace_t *namespace, int *level)193 {194 ipc_callid_t callid;195 size_t size;196 bool expects_data_read = async_data_read_receive(&callid, &size);197 if (!expects_data_read) {198 return EINVAL;199 }200 201 log_message_t *message = namespace_get_next_message(namespace);202 size_t message_len = str_size(message->message) + 1;203 204 if (size > message_len) {205 size = message_len;206 }207 208 async_data_read_finalize(callid, message->message, size);209 210 *level = (int) message->level;211 message_destroy(message);212 213 return EOK;214 }215 216 217 static void connection_handler_source(logging_namespace_t *namespace)218 {219 printf(NAME "/source: new client for %s.\n", namespace_get_name(namespace));220 221 while (true) {222 ipc_call_t call;223 ipc_callid_t callid = async_get_call(&call);224 225 if (!IPC_GET_IMETHOD(call))226 break;227 228 int rc;229 int message_level = 0;230 231 switch (IPC_GET_IMETHOD(call)) {232 case LOGGER_GET_MESSAGE:233 rc = handle_send_message(namespace, &message_level);234 async_answer_1(callid, rc, message_level);235 break;236 default:237 async_answer_0(callid, EINVAL);238 break;239 }240 }241 242 printf(NAME "/source: client %s terminated.\n", namespace_get_name(namespace));243 namespace_reader_detach(namespace);244 158 } 245 159 … … 265 179 connection_handler_sink(namespace); 266 180 break; 267 case LOGGER_INTERFACE_SOURCE:268 async_answer_0(iid, EOK);269 /* First call has to find existing namespace. */270 namespace = find_namespace_and_attach_reader();271 if (namespace == NULL) {272 fprintf(stderr, NAME ": failed to attach client.\n");273 break;274 }275 connection_handler_source(namespace);276 break;277 181 default: 278 182 async_answer_0(iid, EINVAL);
Note:
See TracChangeset
for help on using the changeset viewer.