PageRenderTime 50ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/src/com/twinql/clojure/sip/util.clj

http://github.com/rnewman/clj-sip
Clojure | 65 lines | 58 code | 6 blank | 1 comment | 8 complexity | 3cca2a479c553224e16afb4d834f930b MD5 | raw file
  1. (ns com.twinql.clojure.sip.util
  2. (:refer-clojure)
  3. (:use com.twinql.clojure.mime)
  4. (:import
  5. (java.lang Exception)
  6. (javax.servlet ServletException ServletInputStream)
  7. (javax.servlet.sip
  8. SipFactory
  9. SipServlet
  10. SipServletMessage
  11. SipServletRequest
  12. SipServletResponse
  13. SipURI)))
  14. (defn servlet-factory [#^SipServlet servlet]
  15. (. (. servlet getServletContext)
  16. getAttribute "javax.servlet.sip.SipFactory"))
  17. (defn sip-uri-maker
  18. [#^SipServlet servlet]
  19. (let [#^SipFactory factory (servlet-factory servlet)]
  20. (fn [user host]
  21. (.createSipURI factory user host))))
  22. (defn success-response? [#^SipServletMessage x]
  23. (and (isa? x SipServletResponse)
  24. (let [#^SipServletResponse res x
  25. status (.getStatus res)]
  26. (and (>= status 200)
  27. (< status 300)))))
  28. (defn copy-sdp
  29. "Returns `to` for convenience."
  30. [#^SipServletMessage from
  31. #^SipServletMessage to]
  32. (try
  33. (let [len (.getContentLength from)]
  34. (when (pos? len)
  35. (let [#^bytes sdp (sdp-body from len)]
  36. (when sdp
  37. ;; Damn, need to define sdp as being a byte array, but can't!
  38. (.setContent to (new String sdp) "application/sdp")))))
  39. (catch Exception e nil))
  40. to)
  41. (defn copy-content
  42. "Returns `to` for convenience."
  43. [#^SipServletMessage from
  44. #^SipServletMessage to]
  45. (when (pos? (.getContentLength from))
  46. (.setContent to
  47. (.getContent from)
  48. (.getContentType from))
  49. (let [#^String enc (.getCharacterEncoding from)]
  50. (when (and enc
  51. (pos? (.length enc)))
  52. (.setCharacterEncoding to enc))))
  53. to)
  54. (defn set-request-uri! [#^SipServletRequest req #^SipURI uri params]
  55. (.setRequestURI req (do
  56. (doseq [[#^String param value] params]
  57. (.setParameter uri param value))
  58. uri))
  59. req)