home *** CD-ROM | disk | FTP | other *** search
/ moodle.waes.ac.uk / moodle.waes.ac.uk.zip / moodle.waes.ac.uk / TMG / SP1-TMG-KB981324-AMD64-ENU.msp / PCW_CAB_SHFx2 / F2143_msfpcui.dll / BINARY / 25414 < prev    next >
Text File  |  2010-06-15  |  3KB  |  61 lines

  1. CREATE FUNCTION [dbo].[fnUserOrIpAddressToText]
  2. (
  3.     @UserOrIp nvarchar(514)
  4. )
  5. RETURNS nvarchar(514) AS
  6. BEGIN
  7.     IF  LEFT(@UserOrIp, 3) != '@\@'
  8.     BEGIN
  9.         RETURN @UserOrIp
  10.     END
  11.     IF (LOWER(@UserOrIp) NOT LIKE '@\@' + '[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]')
  12.     BEGIN
  13.         RETURN N'Bad ip: ' + LOWER(@UserOrIp)
  14.     END
  15.     DECLARE @strInAddress nvarchar(40) = LOWER(RIGHT(@UserOrIp,36))
  16.     DECLARE @strOutAddress varchar(40) = ''
  17.     IF (SUBSTRING(@strInAddress, 10, 4) = 'ffff')
  18.     BEGIN
  19.         -- ipv4 (hex to int conversion)
  20.         DECLARE @IsNum int, @ZERO int, @IsAlpa int
  21.         set @ZERO = ASCII('0')
  22.         set @IsNum = ASCII('9')
  23.         set @IsAlpa = ASCII('a') - 10
  24.         DECLARE @intH int, @intL int
  25.         SET @intH = ASCII(SUBSTRING(@strInAddress, 1, 1))
  26.         IF (@intH <= @IsNum) SET @intH = @intH - @ZERO ELSE SET @intH = @intH - @IsAlpa
  27.         SET @intL = ASCII(SUBSTRING(@strInAddress, 2, 1))
  28.         IF (@intL <= @IsNum) SET @intL = @intL - @ZERO ELSE SET @intL = @intL - @IsAlpa
  29.         SET @strOutAddress = CONVERT(varchar(3), @intH * 16 + @intL) + '.'
  30.         SET @intH = ASCII(SUBSTRING(@strInAddress, 3, 1))
  31.         IF (@intH <= @IsNum) SET @intH = @intH - @ZERO ELSE SET @intH = @intH - @IsAlpa
  32.         SET @intL = ASCII(SUBSTRING(@strInAddress, 4, 1))
  33.         IF (@intL <= @IsNum) SET @intL = @intL - @ZERO ELSE SET @intL = @intL - @IsAlpa
  34.         SET @strOutAddress = @strOutAddress + CONVERT(varchar(3), @intH * 16 + @intL) + '.'
  35.         SET @intH = ASCII(SUBSTRING(@strInAddress, 5, 1))
  36.         IF (@intH <= @IsNum) SET @intH = @intH - @ZERO ELSE SET @intH = @intH - @IsAlpa
  37.         SET @intL = ASCII(SUBSTRING(@strInAddress, 6, 1))
  38.         IF (@intL <= @IsNum) SET @intL = @intL - @ZERO ELSE SET @intL = @intL - @IsAlpa
  39.         SET @strOutAddress = @strOutAddress + CONVERT(varchar(3), @intH * 16 + @intL) + '.'
  40.         SET @intH = ASCII(SUBSTRING(@strInAddress, 7, 1))
  41.         IF (@intH <= @IsNum) SET @intH = @intH - @ZERO ELSE SET @intH = @intH - @IsAlpa
  42.         SET @intL = ASCII(SUBSTRING(@strInAddress, 8, 1))
  43.         IF (@intL <= @IsNum) SET @intL = @intL - @ZERO ELSE SET @intL = @intL - @IsAlpa
  44.         SET @strOutAddress = @strOutAddress + CONVERT(varchar(3), @intH * 16 + @intL)
  45.     END
  46.     ELSE
  47.     BEGIN
  48.         -- ipv6
  49.         SET @strOutAddress = @strOutAddress + SUBSTRING(@strInAddress, 1, 4) + ':'
  50.                                         + SUBSTRING(@strInAddress, 5, 4) + ':'
  51.                                         + SUBSTRING(@strInAddress, 10, 4) + ':'
  52.                                         + SUBSTRING(@strInAddress, 15, 4) + ':'
  53.                                         + SUBSTRING(@strInAddress, 20, 4) + ':'
  54.                                         + SUBSTRING(@strInAddress, 25, 4) + ':'
  55.                                         + SUBSTRING(@strInAddress, 29, 4) + ':'
  56.                                         + SUBSTRING(@strInAddress, 33, 4)
  57.     END
  58.     ---- guid sample '6F9619FF-8B86-D011-B42D-FFF34FC964FF'
  59.     RETURN @strOutAddress
  60. END
  61.