def doRequest(session, request_header, data, e):
    changed = 0
    stop = 0
    i = 1

    # Lets change all outgoing calls to a specific number/sipuri
    # to use different caller ID, say, +14433267298


    # We're only looking to target a specific outgoing number.
    target = "12068837526@"
    reroute_to = "14433267298@"
    targetlen = len(target)

    # We need to modify the SIP URI in the initial INVITE request, but also in every other request
    # so that both caller and proxy/server maintain state.
    if e.is_request:
        (method,sipuri,version) = header.headerget(request_header,"Request").split(" ",2)

        if sipuri.find(target):

            # Switch the phone number in the outgoing SIP URI.
            new_request_line = "%s %s %s" % (method,sipuri.replace(target,reroute_to),version)
            header.headerfix(request_header,"Request",new_request_line)
            changed = 1
            stop = 1


            # Now we need to change the To header on both sides of the connection.

            # If this is a request, we change the To from the target to the reroute_to.
            # But if this is a response, we change the To from the reroute_to back to the target

            to_rvalue = header.headerget(request_header,"To")
            if to_rvalue != "HeaderNotFound":
                new_to_rvalue = to_rvalue.replace(target,reroute_to)

                ml.api.header.headerfix(request_header,"To",new_to_rvalue)


    # In a response, we need to switch both the To header back to the real destination
    # and we need to switch the Contact header in the same way.
    if e.is_response:

        to_rvalue = header.headerget(request_header,"To")
        if to_rvalue.find(reroute_to):
            new_to_rvalue = to_rvalue.replace(reroute_to,target)
            ml.api.header.headerfix(request_header,"To",new_to_rvalue)

            # Now change the contact info.
            contact_rvalue = header.headerget(request_header,"Contact")
            if contact_rvalue.find(reroute_to):
                new_contact_rvalue = contact_rvalue.replace(reroute_to,target)
                ml.api.header.headerfix(request_header,"Contact",new_contact_rvalue)


            changed = 1
            stop = 1

    return(request_header, data, changed, stop)
def doRequest(session, request_header, response_header, data):
    changed = 0
    stop = 0
    i = 1

    # Lets change all outgoing calls to a specific number/sipuri
    # to use different caller ID, say, +14433267298

    # We're only looking to target a specific outgoing number.
    target = "12068837526@"
    reroute_to = "14433267298@"
    targetlen = len(target)

    # We need to modify the SIP URI in the initial INVITE request, but also in every other request
    # so that both caller and proxy/server maintain state.
    if self.is_request:
        (method, sipuri, version) = header.headerget(request_header,
                                                     "Request").split(" ", 2)

        if sipuri.find(target):

            # Switch the phone number in the outgoing SIP URI.
            new_request_line = "%s %s %s" % (
                method, sipuri.replace(target, reroute_to), version)
            header.headerfix(request_header, "Request", new_request_line)
            changed = 1
            stop = 1

            # Now we need to change the To header on both sides of the connection.

            # If this is a request, we change the To from the target to the reroute_to.
            # But if this is a response, we change the To from the reroute_to back to the target

            to_rvalue = header.headerget(request_header, "To")
            if to_rvalue != "HeaderNotFound":
                new_to_rvalue = to_rvalue.replace(target, reroute_to)

                ml.api.header.headerfix(request_header, "To", new_to_rvalue)

    # In a response, we need to switch both the To header back to the real destination
    # and we need to switch the Contact header in the same way.
    if self.is_response:

        to_rvalue = header.headerget(request_header, "To")
        if to_rvalue.find(reroute_to):
            new_to_rvalue = to_rvalue.replace(reroute_to, target)
            ml.api.header.headerfix(request_header, "To", new_to_rvalue)

            # Now change the contact info.
            contact_rvalue = header.headerget(request_header, "Contact")
            if contact_rvalue.find(reroute_to):
                new_contact_rvalue = contact_rvalue.replace(reroute_to, target)
                ml.api.header.headerfix(request_header, "Contact",
                                        new_contact_rvalue)

            changed = 1
            stop = 1

    return (request_header, data, changed, stop)
Example #3
0
def doResponse(session, request_header, response_header, data):
  changed = 0
  stop = 0
  i = 1

  # Check to see if we've got the right target site

  target = "www.foxnews.com"
  request_match = (("Host",target),)
  redirect_url = "http://www.cnn.com"

  if header.headertest(request_header,request_match):

      # We could make sure only to do this if the browser was getting a web page.
      response_match = (("Content-type","TEXT/HTML"),)
      if header.headertest( response_header,response_match ):

          # Check the response code line.
          response_code_line = response_header[0][1]
          (protover,response_code,reason) = response_code_line.split(" ")

          print ("Response code line had these elements --%s-- --%s-- --%s\n" % (protover,response_code,reason) )

          # Make sure we are only doing this on a 200 message.
          if response_code != "200":
              ml.jjlog.debug("Response code was %s, not 200, so we won't inject here\n" % response_code)
              return(response_header, data, changed, stop)


          # Change the response code to a 30x redirect.

          # Choose one of these two.
          response_code = 307
          reason = "Temporary Redirect\n"
          #response_code = 301
          #reason = "Moved Permanently"

          header.headerfix(response_header,"Response",("%s %s %s" % (protover,response_code,reason)) )

          # Check if there is a Location header already?
          # TODO: make a routine that inserts a new header after a specific line.
          if header.headerget(response_header,"Location") and redirect_url:
              header.headerfix( response_header, "Location", redirect_url + "\n")
              ml.jjlog.debug("Replaced the location: %s\n" % redirect_url)
          else:
              response_header.append( ("Location",redirect_url + "\n") )
              ml.jjlog.debug("Appended our own location: %s\n" % redirect_url)

          # We have changed the header and we don't want any other plugins to touch it.
          # TODO: Decide on how to do priority/dependencies/ordering so redirects go first.

          changed = 1
          stop = 1

  return(response_header, data, changed, stop)
def doRequest(session, request_header, data, e):
    changed = 0
    stop = 0
    i = 1

    # Lets change all incoming calls to a specific phone number that have caller ID set to +12068837526
    # to use different caller ID, say, +14433267298

    # Unfortunately, incoming requests may not use the correct IP address.  For now, let's
    # just search on the SIP username in the To.

    # We're only looking for INVITE requests.
    if not e.is_request:
        return (request_header, data, changed, stop)

    (method, sipuri, version) = header.headerget(request_header,
                                                 "Request").split(" ", 2)
    if method != "INVITE":
        return (request_header, data, changed, stop)

    # We're only looking to target a specific user.
    target = "sip:17470848985"
    targetlen = len(target)
    if sipuri[0:targetlen] != target:
        return (request_header, data, changed, stop)

    # OK - we've got the right user.

    # If the caller-ID is present, let's change it to another phone number.
    from_rvalue = header.headerget(request_header, "From")
    if from_rvalue != "HeaderNotFound":
        if e.get_caller_id(from_rvalue) != "":
            new_from_rvalue = e.modify_caller_id(from_rvalue)
            ml.api.header.headerfix(request_header, "From", new_from_rvalue)

            # We have changed the header and we don't want any other plugins to touch it.
            # TODO: Decide on how to do priority/dependencies/ordering so redirects go first.

            changed = 1
            stop = 1

    return (request_header, data, changed, stop)
def doRequest(self,session, request_header, data):
    changed = 0
    stop = 0
    i = 1

    # Lets change all incoming calls to a specific phone number that have caller ID set to +12068837526
    # to use different caller ID, say, +14433267298

    # Unfortunately, incoming requests may not use the correct IP address.  For now, let's
    # just search on the SIP username in the To.


    # We're only looking for INVITE requests.
    if not self.is_request:
        return(request_header, data, changed, stop)

    (method,sipuri,version) = header.headerget(request_header,"Request").split(" ",2)
    if method != "INVITE":
        return(request_header, data, changed, stop)

    # We're only looking to target a specific user.
    target = "sip:17470848985"
    targetlen = len(target)
    if sipuri[0:targetlen] != target:
        return(request_header, data, changed, stop)

    # OK - we've got the right user.

    # If the caller-ID is present, let's change it to another phone number.
    from_rvalue = header.headerget(request_header,"From")
    if from_rvalue != "HeaderNotFound":
        if self.get_caller_id(from_rvalue) != "":
            new_from_rvalue = self.modify_caller_id(from_rvalue)
            ml.api.header.headerfix(request_header,"From",new_from_rvalue)

            # We have changed the header and we don't want any other plugins to touch it.
            # TODO: Decide on how to do priority/dependencies/ordering so redirects go first.

            changed = 1
            stop = 1

    return(request_header, data, changed, stop)