public AGIScript DetermineScript(AGIRequest request) { AGIScript script = null; if (mapping != null) { lock (mapping.SyncRoot) { if (mapping.Contains(request.Script)) { script = (AGIScript)mapping[request.Script]; } } } return(script); }
public AGIRequest ReadRequest() { var lines = new List <string>(); try { #if LOGGER logger.Info("AGIReader.ReadRequest():"); #endif string line; while ((line = socket.ReadLine()) != null) { if (line.Length == 0) { break; } lines.Add(line); #if LOGGER logger.Info(line); #endif } } catch (IOException ex) { throw new AGINetworkException("Unable to read request from Asterisk: " + ex.Message, ex); } var request = new AGIRequest(lines) { LocalAddress = socket.LocalAddress, LocalPort = socket.LocalPort, RemoteAddress = socket.RemoteAddress, RemotePort = socket.RemotePort }; return(request); }
public abstract void Service(AGIRequest param1, AGIChannel param2);
public void Run() { try { var reader = new AGIReader(socket); var writer = new AGIWriter(socket); AGIRequest request = reader.ReadRequest(); //Added check for when the request is empty //eg. telnet to the service if (request.Request.Count > 0) { var channel = new AGIChannel(writer, reader, _SC511_CAUSES_EXCEPTION, _SCHANGUP_CAUSES_EXCEPTION); AGIScript script = mappingStrategy.DetermineScript(request); Thread.SetData(_channel, channel); if (script != null) { #if LOGGER logger.Info("Begin AGIScript " + script.GetType().FullName + " on " + Thread.CurrentThread.Name); #endif script.Service(request, channel); #if LOGGER logger.Info("End AGIScript " + script.GetType().FullName + " on " + Thread.CurrentThread.Name); #endif } else { var error = "No script configured for URL '" + request.RequestURL + "' (script '" + request.Script + "')"; channel.SendCommand(new VerboseCommand(error, 1)); #if LOGGER logger.Error(error); #endif } } else { var error = "A connection was made with no requests"; #if LOGGER logger.Error(error); #endif } } catch (AGIHangupException) { } catch (IOException) { } catch (AGIException ex) { #if LOGGER logger.Error("AGIException while handling request", ex); #else throw ex; #endif } catch (Exception ex) { #if LOGGER logger.Error("Unexpected Exception while handling request", ex); #else throw ex; #endif } Thread.SetData(_channel, null); try { socket.Close(); } #if LOGGER catch (IOException ex) { logger.Error("Error on close socket", ex); } #else catch { } #endif }